In my app I try to save ArrayList state with putSerializable method in onSaveInstanceState. And restore it in onCreate and onRestoreInstanceState. In my app if there is no saved instance of this object it will be create from internet data. But all the time I try to test this solution ArrayList start to downloading from network. Can anyone help me?
public class Activity extends SherlockActivity {
ListView listView;
SlidingMenu slidingMenu;
ArrayList<HashMap<String, String>> newsList = null;
String url = "/////here_my_url////";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setTitle(R.string.news_vatican);
listView = (ListView) findViewById(R.id.newslist);
slidingMenu = new SlidingMenu(this);
slidingMenu.setMode(SlidingMenu.LEFT);
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
slidingMenu.setFadeDegree(0.35f);
slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
slidingMenu.setMenu(R.layout.slidingmenu);
slidingMenu.setBehindOffset(150);
if (savedInstanceState != null){
newsList = (ArrayList<HashMap<String, String>>) savedInstanceState.getSerializable("list");
Log.e("Activity", "RESTORING");
} else {
Log.e("Activity", "PARSING NEW");
JSONParser parser = new JSONParser(this);
parser.execute(url);
try {
newsList = parser.get();
} catch (InterruptedException e) {
e.printStackTrace();
Log.e("Activity", "Failed to get newslist");
} catch (ExecutionException e) {
e.printStackTrace();
Log.e("Activity", "Failed to get newslist");
}
}
listView.setAdapter(new NewsAdapter(getApplicationContext(), newsList));
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable("list", newsList);
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
newsList = (ArrayList<HashMap<String, String>>) savedInstanceState.getSerializable("list");
}
If the list is not too large, one easy option would be to save it to Shared Preferences. However, you would need to serialize the ArrayList, as you can only store Strings.
You could try something like this in your
onSaveInstanceState()
...SharedPreferences.Editor editor = getSharedPreferences("shared_preferences", 0).edit();
editor.putString("myList", serialize(myList));
editor.commit()
Then later you can access this list anywhere, such as in your
onCreate()
method, even if your activity has been killed by doingAgain, this would require the extra work of creating methods to serialize and deserialize your ArrayList, but it would certainly be an easy option if this is the only data you need to persist.