SharedPreferences中的组键值对

时间:2019-02-04 20:58:43

标签: android kotlin

我想将数据保存到SharedPreferences,但是我想为不同的实例分组相同的值列表。例如:

class Player(name: String, age: Int, gender: String) {

}

PlayerDetails.kt

override fun onClick(v: View?) {

    val name: String = player_name.text.toString()

    val age = if (player_age.text.toString().isNotEmpty()) player_age.text.toString().toInt() else 0
    val genderId: Int = gender.checkedRadioButtonId
    val gender: String = if (genderId > 0) resources.getResourceEntryName(genderId) else ""

    if (name.isNotEmpty() && genderId > 0 && age > 0 ){

        val player = Player(name, age, gender)

        val sharedPref = this@PlayerDetails.getSharedPreferences("user_details", Context.MODE_PRIVATE)
        ... 
        // get a specific Player's age

    } else {
        blankFields()
    }


}

我希望SharedPreferences文件在一个文件中包含所有Player实例:

... / shared_prefs / user_details.xml

<map>
    <string name="name">peter</string>
    <string name="age">22</string>
    <string name="gender">male</string>
</map>
<map>
    <string name="name">steven</string>
    <string name="age">24</string>
    <string name="gender">male</string>
</map>

如何访问单个Player实例(例如Peter的age)?

如果我执行sharedPref.getString("age","defaultName"),则由于存在多个实例,因此无法定位到特定玩家的age

2 个答案:

答案 0 :(得分:2)

这确实不是共享偏好的目的。如果要在本地保存复杂数据,请查看“房间” How to make a 20 rows x 50 columns grid in java,以添加一个小型SQL lite数据库。

答案 1 :(得分:1)

通常,您应该使用数据库来存储列表或地图。

但是,如果您确实要将其存储在SharedPrefences中,我建议您序列化 MapJSON中,然后将其保存在{{1}中}。解决问题的最简单方法。