我有一个ArrayList,里面填充了一些我想在用户切换屏幕方向(onSaveInstanceState)时保留的自定义POJO,以及用户点击后退按钮(onPause)。
据我所知,SharedPreferences只能保存原始数据类型,而bundle不能保存对通用ArrayLists的引用。
有关如何解决此问题的任何提示?
问候,
马库斯
答案 0 :(得分:1)
我不知道这是不是正确的方法,但我这样处理这个总是成功,而你的应用程序本身丢失了所有缓存数据,然后你也可以找回可序列化对象 - >
对于通用ArrayLists始终使用可序列化
只看一次http://developer.android.com/reference/java/io/Serializable.html
答案 1 :(得分:1)
1-创建一个类并放置您要存储的所有内容,例如arraylist
的{{1}},并使该类实现POJO
接口。
Serializable
2-将其写入文件:
class MyBundle implements Serializable {
ArrayList<POJO> mPOJO;
MyBundle( ArrayList<POJO> pojo){
mPOJO= pojo;
}
}
并取回所有内容:
ObjectOutputStream oos = null;
FileOutputStream fout = null;
try{
FileOutputStream fout = new FileOutputStream("Your file path");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(mb); // mb is an instance of MyBundle
} catch (Exception ex) {
e.printStackTrace();
}finally {
if(oos != null){
oos.close();
}
}
答案 2 :(得分:0)
尝试使用Gson或Jackson将List转换为Json。 将字符串存储在“共享”首选项中。有点像下面的代码
String listString = gsonSD.toJson(list<object> instance);
SharedPreferences storeDataPref = getContext().getSharedPreferences("list_store_pref", Context.MODE_PRIVATE);
Editor storeDataEditor = storeDataPref.edit();
storeDataEditor.putString("liststringdata", listString).apply();
答案 3 :(得分:0)
重复问题请参阅有关将Arraylist保存在状态的问题的答案: https://stackoverflow.com/a/25400275/1826581