【问题标题】:Android Shared Preferences with ArrayList使用 ArrayList 的 Android 共享首选项
【发布时间】:2016-03-10 07:28:23
【问题描述】:

我正在尝试保存和检索 ArrayList 作为共享首选项。

我的 ArrayList 中有三个名为 arra 的项目,但是当我尝试在 set.addAll(arr) 的 Set 中添加值时,只添加了两个项目。

以下代码中是否有任何更正,以便我可以将数组列表正确保存为共享首选项。

 SharedPreferences prefs = this.getSharedPreferences(filename,Context.MODE_PRIVATE);

                    Set<String> set = prefs.getStringSet(filename, null);
                    arra = new ArrayList<String>();
                    for (String str : set)
                       arra.add(str);

ArrayList的保存

 SharedPreferences prefs=this.getSharedPreferences(filename,Context.MODE_PRIVATE);
        SharedPreferences.Editor edit=prefs.edit();

        Set<String> set = new HashSet<String>();
        set.addAll(arr);
        edit.putStringSet(filename, set);
        edit.commit();

【问题讨论】:

  • 您要保存的数组的确切内容是什么?
  • @Doug Stevenson ArrayList of Strings.
  • 确切的字符串是什么?
  • 参考旧的 StackOverflow - stackoverflow.com/questions/7057845/…
  • @DougStevenson 我正在尝试将复选框数据保存为数组中的真假字符串。我可以在集合中存储类似的值吗?

标签: java android android-studio collections sharedpreferences


【解决方案1】:

java 集合中的Set不允许插入重复的条目,并且 ArrayList 中的三个项目中有两个是相同的。这就是其中只有两个被保存在 SharedPreferences 中的原因。

【讨论】:

    【解决方案2】:

    您正在尝试将布尔真值和假值存储为字符串。这意味着您只能有两个可能的字符串,“true”和“false”。设置类型容器仅存储唯一值 - 没有重复项。所以在你的集合中你最多只能有两个不同的值,“true”和“false”。

    如果您想存储一个列表,您可能希望以某种方式将其转换为字符串,以便保留实际值和顺序。然后在读取该值时,解析字符串以重建列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多