【问题标题】:Saving an entire Bundle to SharedPreferences将整个 Bundle 保存到 SharedPreferences
【发布时间】:2012-08-10 14:25:11
【问题描述】:

假设我的一个方法传递了一个 Bundle 已经填充了要保存的数据,有没有办法将它保存到 SharedPreferences 不拆开到整数、浮点数、字符串等?

我更喜欢“一举”编写/提交所有内容的便利性,所以如果使用SharedPreferences 无法做到这一点,您会推荐什么其他persistent 存储方法?

【问题讨论】:

    标签: android bundle sharedpreferences


    【解决方案1】:

    SharedPreferences 被序列化为 XML,这就是你只能使用简单类型的原因。您要么必须自己将包转换为单独的 SharePreferences 属性,要么以其他方式将包序列化到磁盘。

    这是一个很好的参考文档,讨论了在 Android 中存储数据的各种可能性:http://developer.android.com/guide/topics/data/data-storage.html

    【讨论】:

    • +1 解释了为什么 SharedPreferences 只支持简单类型的原因。
    【解决方案2】:

    据我所知,您只能将原始数据(及其包装)保存到 SharedPreferences

    您为什么不创建自己的辅助方法来遍历 Bundle 并将其中的所有值保存到 SharedPreferences 中?

    【讨论】:

    • SharedPreferences 旨在存储简单类型,但我想您可以将您的 Bundle 序列化为字节数组并将其转换为字符串。有人可能会争辩说,您只是将维护 SharedPreferences 的工作转移到了维护 Bundle 的工作上。
    • 我的方法是更喜欢框架中已经存在的方法和技术,而不是“重新发明轮子”。我的问题旨在找出 Android SDK 中是否已经存在这样的辅助方法,或者我确实应该创建自己的。我想你回答了我的问题。 +1。
    • @Sparky “有人可能会争辩说,您只是将维护 SharedPreferences 的工作替换为,而不是维护 Bundle。” - 我非常认同这一点,但检查使用Bundle.writeToParcel() 的可能性,然后将其序列化为String,看起来比每次添加新状态变量时都必须更新帮助方法更通用和高效。
    • @Sparky 然后,Parcel.marshall() 文档再次警告说 “您在此处检索的数据不得放置在任何类型的持久存储中(在本地磁盘上、通过网络等)。 ".这使得将任何 Bundle 的保存推广到本地 Android 持久存储的任务令人生畏......(我只是在寻找 5 分钟的解决方案,而不是 5 小时的解决方案)。
    【解决方案3】:
    • 注意:如果您在项目中使用 Gson,那么我认为这是一个更好的解决方案。

    我只是使用Google 中的Gson 将指定的对象序列化为其等效的JSON 表示:

    使用这个依赖

    implementation 'com.google.code.gson:gson:2.8.6'
    

    代码:

    Gson gson = new Gson();
    String dataToJson = gson.toJson(modelObj);
    

    然后我将dataToJson 作为字符串存储在 SharedPreferences.Simple 中!

    字符串提取时:

    String myStoredVal = Value stored in SharedPreference. 
    GsonBuilder builder = new GsonBuilder();
    builder.setPrettyPrinting();
    
    Gson gson = builder.create();
    MyModel modelObj = gson.fromJson(prodDataStr, MyModel.class);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-29
      • 2011-10-26
      • 2020-11-28
      • 2016-06-23
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多