【问题标题】:How to store Integer Hashset in SharedPreference?如何在 SharedPreference 中存储整数哈希集?
【发布时间】:2018-06-08 05:53:40
【问题描述】:

它说错误的第二个参数类型需要设置字符串。

Set<Integer> hs = pref.getStringSet("set", new HashSet<Integer>());
hs.add(String.valueOf(hs.size()+1));
SharedPreferences.Editor edit = pref.edit();
edit.putStringSet("set", hs);
edit.commit();

【问题讨论】:

  • 使用 GSON 转换为 JSON。然后在 SharedPreferences 中保存为字符串。
  • 你能分享一下例子吗
  • SharedPreference 不支持Integer HashSet。您需要手动进行来回转换。
  • getStringSet 方法是不言自明的,它返回一个 String 集。您不能将其用于 Integer
  • 检查这个库。你会发现许多方法和关于共享首选项。 github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo

标签: android sharedpreferences hashset


【解决方案1】:

您可以像这样进行转换并将其存储在SharedPreferences中,

SharedPreferences preferences = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
    Set<Integer> integerHashSet = new HashSet<>();
    integerHashSet.add(1);
    integerHashSet.add(2);

    //convert String HashSet to Integer HashSet
    Set<String> stringHashSet = new HashSet<>();
    for (Integer i : integerHashSet) {
        stringHashSet.add(String.valueOf(i));
    }

    preferences.edit().putStringSet("set", stringHashSet).commit();
    Set<String> stringSet = preferences.getStringSet("set", new HashSet<String>());
    Set<Integer> integerSet = new HashSet<>();

    //Convert it back
    for (String str : stringSet) {
        integerSet.add(Integer.parseInt(str));
    }

    //now user integerSet

【讨论】:

    【解决方案2】:

    使用 Gson

    implementation 'com.google.code.gson:gson:2.8.5'
    

    Gson 帮助将自定义对象转换为字符串 & 将字符串转换为自定义对象。 因此,您可以将设置转换为字符串保存到共享首选项。然后从共享首选项中获取字符串并转换为集合。

    保存

    Set<Integer> mySet = new HashSet<>();
    String json = new Gson().toJson(mySet);
    //Save json to shared pref
    

    然后去检索

    //get json from shared preference saved earlier
    Set<Integer> mySet2 = new Gson().fromJson(json, new TypeToken<Set<Integer>>() {
                }.getType());
    

    【讨论】:

      【解决方案3】:

      它说错误的第二个参数类型需要设置字符串。

      这是因为您错误地将getStringSet 与以下代码一起使用:

      Set<Integer> hs = pref.getStringSet("set", new HashSet<Integer>());
      

      应该是这样的:

      Set<String> hs = pref.getStringSet("set", new HashSet<String>());
      

      您应该认出方法签名,该签名清楚地表明该方法为您提供了一个带有getStringSet 的字符串集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多