Попытка сохранить mutableListOf <String>в SharedPreferences, но не может установить значение по умолчанию - PullRequest
2 голосов
/ 31 октября 2019

В конечном итоге я пытаюсь сохранить массив Int в общих настройках, но я знаю, что Котлин не поддерживает это. Поэтому я конвертирую свой Int Array в String Array, используя следующий метод:

Как мне сохранить целочисленный массив в SharedPreferences?

Моя проблема в том, что яизо всех сил пытается ввести значение по умолчанию для метода getStringSet:

private fun loadIntScoreArray() {
        val prefs = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE)
        //TODO: Load the String array
        var default = emptyList<String>()
        avgScoreArrayString = prefs.getStringSet(AVG_SCORE_ARRAY, default)
    }

Однако default не является приемлемым объектом в строке prefs.getStringSet(AVG_SCORE_ARRAY, default). Ошибка сбивает с толку, потому что она кажется противоречивой:

Обязательно: MutableList

Найдено: (Изменяемый) Set!

Обязательно: (изменяемый) набор!

Найдено: MutableList

1 Ответ

1 голос
/ 31 октября 2019

Есть несколько вещей, которые вам нужно знать. Начиная с API 11 вы можете хранить только простые объекты или наборы с общими настройками. Вы можете преобразовать свой список в набор, но это может быть преобразование с потерями в вашем списке, содержащем дубликаты.

Если вы хотите использовать наборы, вы должны называть его так:

//to get
prefs.getStringSet(AVG_SCORE_ARRAY, emptySet<String>()))
//to set
prefs.edit().putStringSet(key, AVG_SCORE_ARRAY)

Другойспособ состоит в том, чтобы объединить массив в одну строку с помощью операции соединения. Вот документ для вас https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/join-to.html

Если честно, оба эти способа не являются идеальными решениями. Если это производственное приложение, и я рекомендую использовать постоянную библиотеку, такую ​​как Room, Realm и т. Д. Надеюсь, это поможет.

Редактировать. Если вы на сто процентов уверены, что у вас будет 5 сохраненных целых (и это не изменится в ближайшем или отдаленном будущем), использование базы данных может быть излишним. Я рекомендую использовать соединение с одной строкой и хранить ее как одну строку или просто хранить 5 независимых значений типа int. Нет смысла усложнять простые вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...