0

我正在使用以下代码发布我的房间查询结果

_data.postValue(databaseImpl.findRepoById(id).value)

但似乎返回的对象是空的。我猜我们需要观察 databaseImpl.findRepoById(id),而不是直接访问它,但由于它在视图模型中,我没有生命周期所有者分配给房间查询 livedata。

       databaseImpl.observe(this, Observer { //!!this is modelview and not activity
            _data.postValue()
        })

使用 Room 查询和更新中介实时数据的正确方法是什么?

4

1 回答 1

0

你可以尝试使用协程来查询你的数据,这样你就可以为你的 DAO 提供这样的东西:

@Query("SELECT * FROM users") 
fun findRepoById(id): Flow<User>

在您的 DatabaseImpl 类中返回:

 fun findRepoById(id): Flow<User>  = userDao.findRepoById(id)

然后在您的 ViewModel 中,您可以这样做:

viewModelScope.launch {
   databaseImpl.findRepoById(id).map { _data.postValue(it) }
}

查看 Florina Muntenescu的这篇文章Room and Coroutines,了解如何设置协程并将其与 Room 一起使用。

于 2021-01-13T07:31:38.603 回答