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

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

我该怎么做? SharedPreferences 好像没有存储parcelable对象的方法。

【问题讨论】:

    标签: android android-intent 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

      【讨论】:

      • 如何将包作为包裹写入磁盘?
      猜你喜欢
      • 2015-04-02
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多