如何在SharedPreference中存储Integer Hashset?

时间:2018-06-08 05:53:40

标签: android sharedpreferences hashset

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

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();

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用Gson

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

Gson帮助将自定义对象转换为字符串&amp;字符串到自定义对象。 所以你可以将set转换为字符串保存到共享的pref。然后从共享pref获取字符串并转换为set。

保存

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());

答案 2 :(得分:0)

  

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

这是因为您使用以下代码错误地使用了getStringSet

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

它应该是这样的:

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

您应该识别方法签名,该签名明确告诉该方法为您提供了getStringSet的字符串集。