android - 如何向具有 ArrayList 属性的数据添加新项目?
问题描述
我有一个像下面这样的模型,我想向朋友数据中添加一个新项目,但它正在创建一个无限循环。所以我该怎么做?
@Entity(tableName = "user_table")
class UserModel
: Serializable {
@PrimaryKey
@NonNull
var _id: String = ""
var userName: String? = null
var userAvatar: String? = null
@TypeConverters(ConvertersDAO::class)
var friends : ArrayList<String> = ArrayList()
}
我的 DAO 界面
@Update
suspend fun updateUserDAO(userModel : UserModel)
@Query("select * from user_table where _id =:id")
fun readUserById(id : String) : LiveData<UserModel>
我的转换器
class ConvertersDAO {
@TypeConverter
fun fromString(value: String?): ArrayList<String?>? {
val listType: Type = object : TypeToken<ArrayList<String?>?>() {}.type
return Gson().fromJson(value, listType)
}
@TypeConverter
fun fromArrayList(list: ArrayList<String?>?): String? {
val gson = Gson()
return gson.toJson(list)
}
}
以及到目前为止我尝试过的(但效果很差)
private fun updateFriend() {
val friendId = "foo"
viewModel.readUserByIdDAO(userId).observe(this,{
val listTemp = it.friends
listTemp.add(friendId)
it.friends = listTemp
viewModel.updateUserDAO(it)
})
}
解决方案
问题在于您获取UserModel
. 您将其观察为LiveData
,并在同一块中对其进行更新,因此每次更新用户时,都会触发可观察代码块再次更新并导致此无限循环。
一个简单的解决方法是引入一种LiveData
从数据库中获取用户的非方法
@Query("select * from user_table where _id =:id")
suspend fun readUserByIdSync(id : String) : UserModel
推荐阅读
- python - Django 没有收到电报 webhook
- python - 使用 soup.find() 提取特定的 html 项
- python - 导入 matplotlib.pyplot 作为 plt 失败
- c - 在不改变输入的情况下实现 strcat
- swift - 无法通过完成处理程序或使用 Firebase 观察方法的任何其他方式传递完成的数组
- python - DataFrame 中的日期格式更改
- ios - 如何在 iPhone X 上滚动时隐藏状态栏上的内容
- java - Serenity/WebDriver:无法访问本地主机
- ios - IOS/Swift:解析 JSON 数据和字典
- java - 从休眠中获取线程“主”java.lang.NullPointerException中的异常