2013-02-12 11 views
5

カスタムオブジェクト(MyObject)を永続的に保存して、メモリから削除された場合、アプリケーションの再起動時にactivity/fragment onResume()メソッドでリロードできます。パーセル可能なカスタムオブジェクトを永続的に保存する方法は?

どうすればいいですか? SharedPreferencesは分解可能なオブジェクトを格納するためのメソッドを持っていないようです。

答えて

21

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 { 

} 
2

Bundleをパーセルとしてディスクに書き込んでから、Parcelを後で入手してParcel.readBundle()メソッドを使用してBundleを元に戻すことができます。

+3

バンドルをパーセルとしてディスクに書き込む方法を教えてください。 –

関連する問題