保存 ArrayList<String> 以保持 [重复]

Posted

技术标签:

【中文标题】保存 ArrayList<String> 以保持 [重复]【英文标题】:Save ArrayList<String> to persist [duplicate] 【发布时间】:2018-07-25 20:18:36 【问题描述】:

我的应用允许用户从设备中安装的各种应用列表中进行选择,如果用户选择一个或多个选项,则每个选择都保存在 ArrayList 中作为应用的名称,例如:

ArrayList<String> appSelected = new ArrayList<>();
appSelected.add("name_of_the_app");

然后数组被用于其他目的。

我的问题是:可以保存数组吗?在应用程序启动时用户无需重新选择应用程序的方式,如用户偏好。

【问题讨论】:

不要将列表重复用于其他目的。如果这就是保存的意思,列表也是可序列化的。或将内容复制到另一个。 参考***.com/questions/9053685/… 【参考方案1】:

您可以将ArrayList&lt;String&gt; 保存在SharedPreference 中。您不能直接将ArrayList 存储在SharedPreference 中。由于您的列表仅包含 StringStringSerializable 因此您可以将列表项转换为 String 并带有一些连接分隔符。然后作为字符串保存到SharedPreference

要检索它,从SharedPreference 获取字符串并使用分隔符将其拆分。

此解决方案仅在您的 String 没有任何逗号(,)时才有效

//String joinStr = StringUtils.join(stringList, ",");
String joinStr = TextUtils.join(",", stringList);
editor.putString(PREF_KEY_LIST_STRINGS, joinStr).commit();

并检索

String restoredStr= prefs.getString(PREF_KEY_LIST_STRINGS, null);
List<String> restoredList = null
if(restoredStr!= null)
  restoredList = Arrays.asList(restoredStr.split(","));
  

这仅适用于字符串类型ArrayList

SharedPreference主要用于简单数据。如果您正在处理大量数据,请考虑使用Sqlite

【讨论】:

如果我使用 for 循环用逗号 (,) 连接所有字符串,它的工作方式与 StringUtils.join() 相同吗?因为我不喜欢使用第三方库。 如果您使用循环手动连接字符串,它的工作方式相同。您可以在import android.text.TextUtils 包中使用TextUtils.join()。在这里查看developer.android.com/reference/android/text/…

以上是关于保存 ArrayList<String> 以保持 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 gwt 中,如何导出 ArrayList<String> 并提示保存对话框供用户下载?

Android保存ArrayList至SharedPreferences

求java二维数组转换成ArrayList<ArrayList<String>>格式

在android中将arraylist <String>值插入sqlite

如何从 ArrayList<HashMap<String, String>> android 中获取所有元素

如何从 ArrayList<Hashtable<String, ArrayList<String>>> 获取值