在我的应用程序中,我尝试使用SharedPreference和Gson jar文件保存ArrayList。 Arraylist具有Person类的对象,它实现了Serializable。我希望ArrayList在按下后退按钮时保留其数据。我在Internet上看到了很多代码但是没有什么特别适合我。我已经编写了部分代码,看到了各种解决方案,但我不确定在哪里使用它,我的代码也需要一些修正,但我无法做到,因为我没有太多的编程经验。
以下是我的代码的一部分:
//保存arraylist
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
Editor editor = prefs.edit();
Gson gson = new Gson();
//String json = gson.toJson(RecipientArray);
for(Person p:RecipientArray){
String json = gson.toJson(p);
editor.putString("RecList", json);
}
editor.commit();
//检索值
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
String json = prefs.getString("RecList", "");
Gson gson = new Gson();
Person p = gson.fromJson(json, Person.class);
RecipientArray.add(p); //RecipientArray is an ArrayList<Person>
这里我不确定如何获取之前保存的所有Person对象。此外,我不知道在哪里放这些代码。请尽快帮助我。
感谢。
答案 0 :(得分:3)
这段代码有问题,因为你只放了一个键“RecList”,这样你就可以把最后一个Person p放到SharedPreferences上。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
Editor editor = prefs.edit();
Gson gson = new Gson();
//String json = gson.toJson(RecipientArray);
for(Person p:RecipientArray){
String json = gson.toJson(p);
editor.putString("RecList", json);
}
editor.commit();
也许您可以更改“RecList _”+数字等密钥,并保存array.size
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
Editor editor = prefs.edit();
Gson gson = new Gson();
//String json = gson.toJson(RecipientArray);
for(int i = 0; i < RecipientArray.size(); i++)
String json = gson.toJson(RecipientArray.get(i));
editor.putString("RecList_"+i, json);
editor.putInt("size",i);
}
editor.commit();
因此您可以像这样获取SharedPreferences中的所有字符串
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
int size = prefs.getInt("size");
for(int i = 0;i<size;i++) {
String json = prefs.getString("RecList_"+i, "");
Gson gson = new Gson();
Person p = gson.fromJson(json, Person.class);
RecipientArray.add(p); //RecipientArray is an ArrayList<Person>
}