如何永久存储可打包的自定义对象? [复制]
Posted
技术标签:
【中文标题】如何永久存储可打包的自定义对象? [复制]【英文标题】:How to permanently store parcelable custom object? [duplicate] 【发布时间】:2013-02-12 18:36:14 【问题描述】:我想永久存储一个自定义对象(我们称之为 MyObject),这样如果它从内存中删除,我可以在应用程序再次启动时在我的 Activity
/Fragment
onResume()
方法中重新加载它。
我该怎么做? SharedPreferences
好像没有存储parcelable对象的方法。
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:您可以将Bundle
作为包裹写入磁盘,然后稍后获取Parcel
并使用Parcel.readBundle()
方法获取您的Bundle
。
【讨论】:
如何将包作为包裹写入磁盘?以上是关于如何永久存储可打包的自定义对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 foreach 循环显示的自定义帖子类型中提供页面的永久链接