【发布时间】:2021-03-01 04:53:55
【问题描述】:
我使用 Kotlin Flow 和 LiveData 从房间数据库中获取对象。我想知道数据库中对象的值发生了变化。我做了以下事情;
UserDao
@Query("SELECT * FROM user WHERE id=:userId")
fun getUserById(userId: String?) : Flow<User>
用户存储库
fun getUserById(userId: String?) : Flow<User> = userDao.getUserById(userId);
视图模型
val userId = MutableStateFlow<String>("")
val user : LiveData<User> = userId.flatMapLatest { id ->
userRepository.getUserById(id)
}.asLiveData()
获取数据时没有问题,但是当我更改用户名时,“user.name”值没有更新。
注意:更改数据库,检查。
我将名称更新如下:
@Query("UPDATE user SET name = :name WHERE id = :userId")
suspend fun updateName(name: String, userId: String)
【问题讨论】:
-
能否提供更新名称的代码?
-
@SamiShorman 你能检查我的更新吗?
-
以及您如何从 ui 调用 updateName(),以及为什么您不在房间中使用 @Update 注释并将新的用户对象传递给函数,我将作为答案提交,也许它会有所帮助。
-
@MuratAKSU 在更新数据库时您是否 ping
userId对象。否则我认为upstream不会被触发并将数据传递给downstream。我不明白这里的流程。
标签: java android kotlin android-livedata kotlin-flow