Android保存ArrayList <customobject> onPause和onSaveInstanceState </customobject>

时间:2014-09-25 09:43:37

标签: java android arraylist onresume onpause

我有一个ArrayList,里面填充了一些我想在用户切换屏幕方向(onSaveInstanceState)时保留的自定义POJO,以及用户点击后退按钮(onPause)。

据我所知,SharedPreferences只能保存原始数据类型,而bundle不能保存对通用ArrayLists的引用。

有关如何解决此问题的任何提示?

问候,

马库斯

4 个答案:

答案 0 :(得分:1)

我不知道这是不是正确的方法,但我这样处理这个总是成功,而你的应用程序本身丢失了所有缓存数据,然后你也可以找回可序列化对象 - &gt;

对于通用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