如何永久地存储parcelable自定义对象? [重复](How to permanently

2019-07-19 18:44发布

这个问题已经在这里有一个答案:

  • 保存捆SharedPreferences [复制] 3个回答

我想存储的自定义对象(姑且称之为MYOBJECT)永久,这样如果是从内存中删除,我可以在我重新加载Activity / Fragment onResume()当应用程序再次启动方法。

我怎样才能做到这一点? SharedPreferences似乎并不具有用于存储parcelable对象的方法。

Answer 1:

如果您需要将其存储在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 {

}


Answer 2:

你可以写你的Bundle作为一个包裹到磁盘,然后拿到Parcel后,使用Parcel.readBundle()方法来获得你的Bundle了。



文章来源: How to permanently store parcelable custom object? [duplicate]