最终,我试图在共享首选项中存储一个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
答案 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值。简单的事情没有意义。