Android SharedPrefence为一个键提供多个值

时间:2018-06-27 17:25:05

标签: android arrays string kotlin sharedpreferences

我在这里有问题。

我不知道如何读取一个特定键的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。

我尝试了很多方法来阅读此书,但它只显示了首选项中写的最后一个元素

我真的想让您理解我想要一个特定键的多个值

4 个答案:

答案 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()
    }

您的数组将被保存为逗号分隔的值,当使用字符串分割功能读回字符串时,该数组将成为数组。

相关问题