Marcus
Marcus

Reputation: 6717

Android saving an ArrayList<CustomObject> onPause and onSaveInstanceState

I have an ArrayList filled with some custom POJO's that I'd like to persist when the user switches screen orientation (onSaveInstanceState) and when e.g. the user hits the back button (onPause).

As far as I know, the SharedPreferences can only hold primitive data types and bundles can not hold references to generic ArrayLists.

Any tips on how to tackle this?

Regards,

Marcus

Upvotes: 2

Views: 1818

Answers (3)

mmlooloo
mmlooloo

Reputation: 18977

1- create a class and put everything you want to store for example arraylist of your POJO and make that class implement Serializable interface.

class MyBundle  implements Serializable {

   ArrayList<POJO> mPOJO;


   MyBundle( ArrayList<POJO> pojo){

    mPOJO= pojo;


   }

}

2- write it to file:

 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();
   } 
 }

and to get back everything:

 ObjectInputStream objectinputstream = null;
 try {
        streamIn = new FileInputStream("Your file address");
        objectinputstream = new ObjectInputStream(streamIn);
        MyBundle mb = (MyBundle) objectinputstream.readObject();

   } catch (Exception e) {
        e.printStackTrace();
   }finally {
     if(objectinputstream != null){
        objectinputstream .close();
     } 
   }

Upvotes: 1

Bhanu Sharma
Bhanu Sharma

Reputation: 5145

i don't know this is correct method or not but i handle this like this this always success while your app lost all cache data itself then also u can get back serializable object->

for generic ArrayLists always use serializable

just look at once http://developer.android.com/reference/java/io/Serializable.html

Upvotes: 1

Harsha Vardhan
Harsha Vardhan

Reputation: 3344

Try converting the List to Json using Gson or Jackson. Store the string in the Shared preference. some thing like below code

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();

Upvotes: 0

Related Questions