Как хранить Integer Hashset в SharedPreference? - PullRequest
0 голосов
/ 08 июня 2018

Неверно указывается тип 2-го аргумента set String.

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 голосов
/ 08 июня 2018

Использовать Gson

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

Gson помогает преобразовать пользовательский объект в строку и строку в пользовательский объект.Таким образом, вы можете преобразовать набор в строку сохранить в общий преф.А позже получить строку из общего префа и преобразовать в 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());
0 голосов
/ 08 июня 2018

Это говорит о том, что 2-й тип аргумента требует неправильной установки String.

Это потому, что вы неправильно используете getStringSet со следующим кодом:

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

это должно быть так:

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

Вы должны распознать сигнатуру метода, которая ясно говорит о том, что метод дает вам строку, установленную с getStringSet.

0 голосов
/ 08 июня 2018

Вы можете выполнить преобразование и сохранить его в 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
...