我想将数据保存到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
。
答案 0 :(得分:2)
这确实不是共享偏好的目的。如果要在本地保存复杂数据,请查看“房间” How to make a 20 rows x 50 columns grid in java,以添加一个小型SQL lite数据库。
答案 1 :(得分:1)
通常,您应该使用数据库来存储列表或地图。
但是,如果您确实要将其存储在SharedPrefences
中,我建议您序列化 Map
到JSON
中,然后将其保存在{{1}中}。解决问题的最简单方法。