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

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

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

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

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

【问题讨论】:

标签: java android string save


【解决方案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/…
猜你喜欢
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多