Android Kotlin - 使用 SharedPreferences 保存和检索自定义模型的 ArrayList
Android Kotlin - save and retrieve ArrayList of custom model with SharedPreferences
在您将其标记为重复之前,我已经看到了类似的问题,并且 none 的解决方案在我尝试时有效!
这是我根据“解决方案”中的答案尝试的方法:
节省:
val gson = Gson()
val hiddenUserList: ArrayList<HiddenUserModel> = ArrayList()
hiddenUserList.add(HiddenUserModel(777L, "steveee"))
hiddenUserList.add(HiddenUserModel(888L, "donbimbo"))
val json = gson.toJson(hiddenUserList)
prefs.edit().putString("hiddenUser", json).apply()
到目前为止,我猜是正确的吗?
现在,当我尝试检索并阅读它时:
if(prefs.getString("hiddenUser", null) != null){
val hiddenUserListBack: ArrayList<HiddenUserModel> = ArrayList()
val gsonBack = Gson()
val jsonBack: String = prefs.getString("hiddenUser", null)!!
val obj: ArrayList<HiddenUserModel> = gsonBack.fromJson(jsonBack, hiddenUserListBack::class.java)
Log.d(tagg, obj[0].nickname + " " + obj[1].nickname)
}
我得到:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.website.blaaa.models.HiddenUserModel
这里有什么问题?
我也接受没有 gson 的解决方案,只要它有效并且不包含大量解决方法
尝试让 Gson 决定将列表反序列化到的实际集合类型。例如,创建一个带有 List
字段的 class:
data class UserBag(val users: List<HiddenUserModel>)
然后把你的用户放在那里,序列化并保存:
...
val json = gson.toJson(UserBag(users = hiddenUserListBack))
prefs.edit().putString("hiddenUser", json).apply()
只是 serialize/deserialize class 的一个实例,因此您无需关心所使用的 List 的实际运行时间:
val userBag = gsonBack.fromJson(jsonBack, UserBag::class.java)
userBag.users.forEach {
Log.d(tagg, "User nickname: ${it.nickname}")
}
在您将其标记为重复之前,我已经看到了类似的问题,并且 none 的解决方案在我尝试时有效!
这是我根据“解决方案”中的答案尝试的方法:
节省:
val gson = Gson()
val hiddenUserList: ArrayList<HiddenUserModel> = ArrayList()
hiddenUserList.add(HiddenUserModel(777L, "steveee"))
hiddenUserList.add(HiddenUserModel(888L, "donbimbo"))
val json = gson.toJson(hiddenUserList)
prefs.edit().putString("hiddenUser", json).apply()
到目前为止,我猜是正确的吗?
现在,当我尝试检索并阅读它时:
if(prefs.getString("hiddenUser", null) != null){
val hiddenUserListBack: ArrayList<HiddenUserModel> = ArrayList()
val gsonBack = Gson()
val jsonBack: String = prefs.getString("hiddenUser", null)!!
val obj: ArrayList<HiddenUserModel> = gsonBack.fromJson(jsonBack, hiddenUserListBack::class.java)
Log.d(tagg, obj[0].nickname + " " + obj[1].nickname)
}
我得到:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.website.blaaa.models.HiddenUserModel
这里有什么问题?
我也接受没有 gson 的解决方案,只要它有效并且不包含大量解决方法
尝试让 Gson 决定将列表反序列化到的实际集合类型。例如,创建一个带有 List
字段的 class:
data class UserBag(val users: List<HiddenUserModel>)
然后把你的用户放在那里,序列化并保存:
...
val json = gson.toJson(UserBag(users = hiddenUserListBack))
prefs.edit().putString("hiddenUser", json).apply()
只是 serialize/deserialize class 的一个实例,因此您无需关心所使用的 List 的实际运行时间:
val userBag = gsonBack.fromJson(jsonBack, UserBag::class.java)
userBag.users.forEach {
Log.d(tagg, "User nickname: ${it.nickname}")
}