尝试将mutableListOf <String>存储到SharedPreferences,但是无法设置默认值

时间:2019-10-31 01:01:37

标签: android arrays kotlin sharedpreferences

最终,我试图在共享首选项中存储一个Int数组,但是我知道Kotlin不支持它。因此,我将使用以下方法将Int Array转换为String Array:

How can I store an integer array in 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

发现:(可变)设置!

必填:(可变)设置!

发现:MutableList

1 个答案:

答案 0 :(得分:1)

您需要了解的事情很少。从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值。简单的事情没有意义。