我在这里有问题。
我不知道如何读取一个特定键的SharedPreferences的所有值。 实际上,我试图在首选项中编写一个Arraylist,然后再读取它。
让我用一些代码解释一下,这是我写首选项的方法:
fun writeArrayOnPreferences(key: String?, array: ArrayList<String>, c:Context) {
val preferences = c.getSharedPreferences(
c.getString(key), Context.MODE_PRIVATE)
with(preferences.edit()) {
for (value in array) {
putString(key, value)
}
commit()
}
}
我的编写代码可以正常工作,并且具有持久性,但是我不太了解如何从首选项中读取此Arraylist。
我尝试了很多方法来阅读此书,但它只显示了首选项中写的最后一个元素
我真的想让您理解我想要一个特定键的多个值
答案 0 :(得分:3)
好吧,这是怎么回事!如果要在共享首选项编辑器中针对一个键使用多个数据,则 SET 是您的解决方案,因为在API 11之后,SharedPreferences编辑器接受集合。您可以将List转换为HashSet或类似的东西,并像这样存储它。当您将其读回时,将其转换为ArrayList,如果需要的话可以对其进行排序。
//Set the values
val yourSet = HashSet<String>()
set.addAll(listOfExistingScores)
yourPrefEditor.putStringSet("key", yourSet)
yourPrefEditor.commit()
//Retrieve the values
val yourSet = yourPref.getStringSet("key", null)
解决方案2
就像序列化ArrayList并传递它一样!但是,如果数组中的任何值确实具有无法解析的任何规则,就会导致崩溃!
有关更多信息,请检查此Thread,它在Java中,但可以帮助您了解更多!
答案 1 :(得分:2)
这是一个基于 Nabin Bhandari 答案的快速示例
fun writeArrayOnPreferences(key: String, array: ArrayList<String>, c:Context) {
val jsonString = Gson().toJson(array)
pref.edit().putString(key, jsonString).commit()
}
fun readArrayFromPreferences(key: String, c: Context): ArrayList<String> {
val jsonString = pref.getString(key)
val array = Gson().fromJson(jsonString, ArrayList<String>()::class.java)
return array
}
答案 2 :(得分:1)
您不能简单地循环使用所有值的相同键将ArrayList
中的值放入首选项中并期望将ArrayList
取回。
您可以转换JSON
格式的'ArrayList'并将其存储在SharedPreferences
中。然后解析JSON
字符串以获得ArrayList
。
借助名为Gson
的库,您可以简化此过程。
答案 3 :(得分:0)
尝试一下:
with(preferences.edit()) {
var s = ""
for (value in array) {
s = s + value + ","
}
putString(key, value)
commit()
}
您的数组将被保存为逗号分隔的值,当使用字符串分割功能读回字符串时,该数组将成为数组。