我有一张ArrayList
美元的带定制物品的票.每个自定义对象包含各种字符串和数字.我需要数组留下来,即使用户离开活动,然后希望稍后再回来,但是在应用程序完全关闭后,我不需要数组可用.我使用SharedPreferences
以这种方式保存了很多其他对象,但是我不知道如何以这种方式保存我的整个array.这个是可能的吗?也许SharedPreferences
不是解决这件事的方法?有没有更简单的方法?
我有一张ArrayList
美元的带定制物品的票.每个自定义对象包含各种字符串和数字.我需要数组留下来,即使用户离开活动,然后希望稍后再回来,但是在应用程序完全关闭后,我不需要数组可用.我使用SharedPreferences
以这种方式保存了很多其他对象,但是我不知道如何以这种方式保存我的整个array.这个是可能的吗?也许SharedPreferences
不是解决这件事的方法?有没有更简单的方法?
API 11之后,SharedPreferences Editor
接受Sets
.你可以把你的列表转换成HashSet
或类似的格式,然后像那样存储.当你把它读回来时,把它转换成ArrayList
,如果需要的话对它进行排序,你就可以开始了.
//Retrieve the values
Set<String> set = myScores.getStringSet("key", null);
//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
您还可以序列化ArrayList
,然后将其保存/读取到SharedPreferences
.以下是解决方案:
EDIT:
Ok, below is the solution to save ArrayList
as a serialized object to SharedPreferences
and then read it from SharedPreferences.
因为API只支持在SharedReferences之间存储和检索字符串(在API 11之后更简单),所以我们必须序列化和反序列化ArrayList对象,该对象包含一个字符串中的任务列表.
在TaskManagerApplication类的addTask()
方法中,我们必须获取共享首选项的实例,然后使用putString()
方法存储序列化的ArrayList:
public void addTask(Task t) {
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
currentTasks.add(t);
// save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(TASKS, ObjectSerializer.serialize(currentTasks));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
同样,我们必须从onCreate()
方法中的首选项中检索任务列表:
public void onCreate() {
super.onCreate();
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentTasks = (ArrayList<task>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
您可以从ApachePig项目ObjectSerializer.java获得ObjectSerializer
类