2

我正在使用 SharedPreferences 来保存和加载我的 ArrayList,如下所示:(保存)

        SharedPreferences loadGlobalVariables = getSharedPreferences(APP_NAME, 0);
        Categories = new ArrayList<String>(loadGlobalVariables.getStringSet("Categories", new HashSet<String>()));

(加载)还有这个(它们都工作正常,保存和加载都正确)

 SharedPreferences saveGlobalVariables = getSharedPreferences(APP_NAME, 0);
    SharedPreferences.Editor editor = saveGlobalVariables.edit();
    editor.putStringSet("Categories", new HashSet<String>(Categories));
    editor.commit();

但是检索到的 ArrayList 的元素顺序与以前不同。我知道这一点是因为我将这个 ArrayList 作为一个列表放入 Dialog 中(每次打开它都会刷新这个列表。),按 Category.toArray(temArray),并且该列表不再按字母顺序排列。

之前,这个 ArrayList 里面的 String 元素按字母顺序排序。当我从 SharedPreferences 中检索它时,它不再按字母顺序排序。

谢谢你的帮助,提前。

4

2 回答 2

9

我用一个技巧克服了这种情况。

  1. 在 SharedPreferences 中首先存储 ArrayList 的大小。
  2. 在 for 循环中,将 arraylist 的元素存储到 SharedPreferences File 中。

现在这里是存储键值对的技巧,保留键“ArraylistName”+元素的位置

检索时:

  1. 首先检索arrayList的大小
  2. for (i = 0 ; i < sizeOfList ; i++) { 获取键值为 "ArrayListName" + i 的元素
于 2013-01-23T12:35:33.480 回答
1

在 JavaSet中不维护其元素的顺序。不幸的是SharedPreferences.Editor,没有提供存储列表的方法,因此您可能应该将列表序列化为字符串并使用putString().

请参阅在 SharedPreferences 中存储列表或集合

于 2013-01-23T12:25:30.123 回答