我已经阅读了许多帖子,但是在我的情况下似乎没有一个答案有效。
我想要实现的是在Fragment中等待ViewModel使用Room执行操作。
Dao:
@Query("SELECT * FROM my_table WHERE id = :id")
suspend fun getMyData(id: Long): List<Item>
在ViewModel中,我不需要返回任何东西,只需使用从数据库中获取的一些数据更新我的变量。我在这里尝试了其他方法,例如返回Deferred。
ViewModel:
suspend fun updateData(myItem: Item) {
for (myField in myItem.fields) {
myField.someOtherField = myDao.getMyData(myField.id)
}
}
我已经尝试使用runBlocking、lifecycleScope.launch和async.await()等方法等待,但结果都一样。我需要处理一个更新后的项目。
片段:
runBlocking {
val job = launch{
viewModel.updateData(myItem)
}
job.join()
doSomethingElseWithUpdatedmyItem(myItem) //this always executes before viewModel.updateData(myItem) even starts
}
doSomethingElseWithUpdatedmyItem
在viewModel.updateData(myItem)
之前执行的? - Brian Yencho