如何添加新项目的数据有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

相关内容

  • 没有找到相关文章

最新更新