如何永久存储可打包的自定义对象? [复制]

Posted

技术标签:

【中文标题】如何永久存储可打包的自定义对象? [复制]【英文标题】:How to permanently store parcelable custom object? [duplicate] 【发布时间】:2013-02-12 18:36:14 【问题描述】:

我想永久存储一个自定义对象(我们称之为 MyObject),这样如果它从内存中删除,我可以在应用程序再次启动时在我的 Activity/FragmentonResume() 方法中重新加载它。

我该怎么做? 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

【讨论】:

如何将包作为包裹写入磁盘?

以上是关于如何永久存储可打包的自定义对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

多个永久链接的自定义模板页面wordpress

如何使自定义对象可迭代?

如何在使用 foreach 循环显示的自定义帖子类型中提供页面的永久链接

HashSet存储过程中如何排除不同的自定义对象?

如何防止 Spring Security 在会话中存储我的自定义 UserDetails 对象

iOS:如何保存在应用程序中创建的自定义对象