gpt4 book ai didi

android - 将 ArrayList 保存到 SharedPreferences

转载 作者:行者123 更新时间:2023-12-01 16:57:50 25 4
gpt4 key购买 nike

我有一个带有自定义对象的ArrayList。每个自定义对象都包含各种字符串和数字。即使用户离开 Activity 然后想要稍后返回,我也需要该数组保留下来,但是在应用程序完全关闭后我不需要该数组可用。我通过使用 SharedPreferences 以这种方式保存了许多其他对象,但我不知道如何以这种方式保存整个数组。这可能吗?也许 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 或从中读取。解决办法如下:

编辑:
好的,下面是将 ArrayList 作为序列化对象保存到 SharedPreferences 中,然后从 SharedPreferences 中读取它的解决方案。

由于 API 仅支持在 SharedPreferences 中存储和检索字符串(在 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();
}
}

您可以从 Apache Pig 项目 ObjectSerializer.java 获取 ObjectSerializer

关于android - 将 ArrayList 保存到 SharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61558329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com