SharedPreferences不会覆盖数据

时间:2017-03-20 13:51:46

标签: java android arraylist android-sharedpreferences

我试图在首选项中写两次具有相同值的列表,当我读回它时,我只得到1个结果。 这是我的SharedPreferences代码:

public void storeDeviceDetails(final ArrayList<String> deviceDetails) {
        SharedPreferences.Editor editor = context.getSharedPreferences("devicePrefs",Context.MODE_PRIVATE).edit();

        Set<String> set = new LinkedHashSet<>();
        set.addAll(deviceDetails);
        editor.putStringSet("deviceDetails", set);
        editor.apply();
    }

    public ArrayList<String> retrieveDeviceDetails() {
        SharedPreferences prefs = context.getSharedPreferences("devicePrefs", MODE_PRIVATE);
        ArrayList<String> details = null;

        Set<String> set = prefs.getStringSet("deviceDetails", null);

        if (set != null) {
            details = new ArrayList<>(set);
        }

        return details;
    }

我将它连续两行写入List -

MyPrefClass.storeDeviceDetails(myList);
MyPrefClass.storeDeviceDetails(myList);

现在在下一行我做MyPrefClass.retrieveDeviceDetails();我只能得到它 - [hero2lte, 7.0, hero2ltexx, SM-G935F, samsung]

1 个答案:

答案 0 :(得分:1)

Set<String> set = new LinkedHashSet<>();

你正在制作一套新套装,所以它完全覆盖了旧套装。

尝试获取已存在于SharedPreferences中的集合(如果存在),如果不存在,则仅创建一个新集合。像这样:

Set<String> set = prefs.getStringSet("deviceDetails", null);

if (set == null) {
    set = new LinkedHashSet<>();
}

另外,正如评论中所提到的,您要添加两次相同的元素。即使您要修复它,Set也保证唯一性,所以它们只会被添加一次。