如何永久存储可序列化的自定义对象?

7

我希望能永久地存储一个自定义的对象(我们称之为MyObject),以便在内存中删除它时,我们可以在应用再次启动时在Activity/FragmentonResume()方法中重新加载它。

那我该怎么做呢?SharedPreferences似乎没有存储可序列化对象的方法。

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 {

}

2

您可以将Bundle作为一个包裹写到磁盘上,然后稍后获取Parcel并使用Parcel.readBundle()方法来重新获取您的Bundle


5
你如何将bundle写入磁盘作为一个parcel? - David Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接