7

カスタム オブジェクト (MyObject と呼びましょう) を永続的に保存して、メモリから削除された場合に、アプリの再起動時にActivity/メソッドに再読み込みできるようにします。Fragment onResume()

どうやってやるの?SharedPreferencesパーセル可能なオブジェクトを格納する方法がないようです。

4

2 に答える 2

25

SharedPreferencesに保存する必要がある場合は、オブジェクトを解析してjson文字列にし、その文字列を保存できます。

private Context context;
private MyObject savedObject;
private static final String PREF_MY_OBJECT = "pref_my_object";
private SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
private Gson gson = new GsonBuilder().create();

public MyObject getMyObject() {
    if (savedObject == null) {
        String savedValue = prefs.getString(PREF_MY_OBJECT, "");
        if (savedValue.equals("")) {
            savedObject = null;
        } else {
            savedObject = gson.fromJson(savedValue, MyObject.class);
        }
    }

    return savedObject;
}

public void setMyObject(MyObject obj) {
    if (obj == null) {
        prefs.edit().putString(PREF_MY_OBJECT, "").commit();
    } else {
        prefs.edit().putString(PREF_MY_OBJECT, gson.toJson(obj)).commit();
    }
    savedObject = obj;
}

class MyObject {

}
于 2013-02-12T18:58:04.750 に答える
2

Bundle小包としてディスクに書き込んでから、Parcel後で取得し、Parcel.readBundle()メソッドを使用して元にBundle戻すことができます。

于 2013-02-12T18:46:23.173 に答える