1

大きな問題が発生しました。HashMap(これを「map」または「hm」と呼びます)を、アプリケーションが実行されているAndroidデバイス上のファイルに保存したいと思います。内部ストレージに保存したいのですが。

私はこのような質問が以前に100のように尋ねられたことを知っていて、私はそれらの約25を試しましたが、どれもうまくいきませんでした。

私は3つのクラスを取得しました。1つは「Activity」を拡張するメインクラスで、もう1つは「util」と呼ばれるクラスです。HashMapを保存してロードするために、2つのメソッドを作成したかったのですが、両方のメソッドは「util」クラスに含まれている必要があります。メインクラスでは、HashMapをロードし、それに何かを入れて、再度保存するためのいくつかのメソッドを作成しました。

ここまでは問題を解決するのは難しいことではありませんが、メインクラス以外の他のクラスでも「save」メソッドと「load」メソッドを使用したいと思います。

他のクラスのContextオブジェクトをメインクラスとして取得する方法がわからないため、メソッドを呼び出すopenFileOutput()方法がわかりません。

要約すると、内部ストレージに作成したいファイルにHashMapを保存してロードしたいと思います。私が使用するメソッドは、「util」クラスに配置され、他のすべてのクラスからアクセス可能である必要があり、静的な方法で優先されます。さまざまな可能性を試しましたが、常に「FileNotFoundException」が発生します。あなたが私を助けてくれることを願っています。

私が使用した方法のいくつか:

        try {
        FileOutputStream fos = c.openFileOutput(s, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(hm);
        oos.flush();
        oos.close();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

このメソッドでは、Contextを使用する必要があり、他のクラスでそれを取得する方法がわかりません。'FileNotFoundException'も発生します...

String file = The path where my file should be located (I don't know how it should be given, but "data/data/[packagename]/[file]" does not work)

        try {
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(hm);
        oos.flush();
        oos.close();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

この方法も機能しません。どの例外が発生したかはわかりません。

最後に:私を助けたい場合は、使用する各オブジェクトを取得する方法を説明してください(文字列などの基本的なものを除いて...)、ソリューション全体を貼り付けてください。正確にこの質問が以前に尋ねられた場合は本当に申し訳ありませんが、私はそれを見つけることができませんでした。

編集

'this.getApplicationContext()。getFilesDir()'メソッドを使用しようとしましたが、それでも'FileNotFoundException'を取得しています...どうすればよいかわかりません。

4

1 に答える 1

0

Utilにアクセスできるクラスから常に-methodsを呼び出す場合は、メソッド呼び出しのパラメーターとしてをActivity追加するだけです。Context

Applicationそれ以外の場合は、コンテキストを取得できるグローバルオブジェクトを作成できます。この特定のコンテキストは、ビューやその他のアクティビティに依存するオプションの作成をサポートしていませんが、ディレクトリはアプリケーションレベルであるため、 openFileOutput()/-メソッドは問題ありません。openFileInput()

これを行うには、それ自体への静的参照を使用してApplicationのサブクラスを作成します。

//In the Application subclass:
static MyApplication instance;
onCreate(){
    super.onCreate();
    instance = this;
}
public static final MyApplication getInstance(){
    return instance;
}

次に、呼び出すだけMyApplication.getInstance();でコンテキストを取得できます。

また、マニフェストにアプリケーションクラスを追加する必要があります(application-tagの下にname-attributeがあります)。

関連資料: AndroidでのシングルトンとApplicationContext

于 2013-03-26T20:01:09.340 に答える