在SharedPreferences中存储<string> ArrayList会混乱元素顺序</string>

时间:2013-01-23 12:13:34

标签: android

我正在使用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中检索回来时,它不再按字母顺序排序。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

我用一招来克服了这种情况。

  1. 在SharedPreferences中首先存储ArrayList的大小。
  2. 在for循环中,将arraylist的元素存储到SharedPreferences文件中。
  3. 现在这里是存储为键值对的技巧保持键“ArraylistName”+元素的位置

    检索时:

    1. 首先检索arrayList的大小
    2. for(i = 0; i&lt; sizeOfList; i ++) {fetch元素的键值为“ArrayListName”+ i}

答案 1 :(得分:1)

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

请参阅Store a List or Set in SharedPreferences