java - SharedPreferences不覆盖数据

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

我将其写入列表中的连续两行 -

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 也能保证唯一性,因此它们无论如何都只会添加一次。

关于java - SharedPreferences不覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42905392/

相关文章:

java - JPA EclipseLink 自定义实体/对象作为 IN 参数

java - Web文档的数字签名

android - android :gravity in attrs. xml 的正确格式?

java - Android:循环遍历字符串数组 - Intent 方法的逻辑需要帮助

Java 与 JPanel

java - 为什么设置ArrayList时不需要返回值?

java - 在 Eclipse 中使用 Spring JDBC 库时遇到问题

java - 基本网络.performRequest : Unexpected response code 500 Android

java - 如何更改自定义启动画面中的背景颜色?

c# - 将 Java WebService 的 Java Arraylist 返回转换为 C# Arraylist