共享首选项不覆盖数据



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

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;
    }

我把它写成 2 连续一行列出 -

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

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

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

您正在制作一个新集,因此它完全覆盖了旧集。

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

Set<String> set = prefs.getStringSet("deviceDetails", null);
if (set == null) {
    set = new LinkedHashSet<>();
}

此外,如评论中所述,您将添加相同的元素两次。即使您要修复它,Set也可以保证唯一性,因此无论如何它们只会添加一次。

最新更新