【发布时间】:2012-08-10 14:25:11
【问题描述】:
假设我的一个方法传递了一个 Bundle 已经填充了要保存的数据,有没有办法将它保存到 SharedPreferences 不拆开到整数、浮点数、字符串等?
我更喜欢“一举”编写/提交所有内容的便利性,所以如果使用SharedPreferences 无法做到这一点,您会推荐什么其他persistent 存储方法?
【问题讨论】:
标签: android bundle sharedpreferences
假设我的一个方法传递了一个 Bundle 已经填充了要保存的数据,有没有办法将它保存到 SharedPreferences 不拆开到整数、浮点数、字符串等?
我更喜欢“一举”编写/提交所有内容的便利性,所以如果使用SharedPreferences 无法做到这一点,您会推荐什么其他persistent 存储方法?
【问题讨论】:
标签: android bundle sharedpreferences
SharedPreferences 被序列化为 XML,这就是你只能使用简单类型的原因。您要么必须自己将包转换为单独的 SharePreferences 属性,要么以其他方式将包序列化到磁盘。
这是一个很好的参考文档,讨论了在 Android 中存储数据的各种可能性:http://developer.android.com/guide/topics/data/data-storage.html
【讨论】:
据我所知,您只能将原始数据(及其包装)保存到 SharedPreferences
您为什么不创建自己的辅助方法来遍历 Bundle 并将其中的所有值保存到 SharedPreferences 中?
【讨论】:
Bundle.writeToParcel() 的可能性,然后将其序列化为String,看起来比每次添加新状态变量时都必须更新帮助方法更通用和高效。
我只是使用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);
【讨论】: