获取 viewModelScope 中方法的结果
get Result of method inside viewModelScope
我是 mvvm 的新手。所以我想问一下如何获取viewModelScope中执行的方法的结果。
在我的示例中,我想在数据库中保存一本书并检索保存的书。有更好的方法吗?
fun addBook (book:Book): BookEntity {
var bookEntity = BookEntity()
viewModelScope.launch {
bookEntity = repository.addBook(book)
}
return bookEntity
}
使用launch
构建器在addBook
方法中启动的协程将在函数returns之后执行,因此bookEntity
不会被重新分配新值来自数据库。您应该考虑如何使用这些数据。如果您希望它仅用作某些其他计算的输入数据,那么制作 addBook()
函数 suspend
:
是有意义的
suspend fun addBook(): BookEntity {
val bookEntity = repository.addBook(book) // I assume function repository.addBook(book) is suspend
return bookEntity
}
如果你想让它显示在 UI 中,你可以像上面那样把它设为 suspend
并使用 lifecycleScope
:
在协程中调用它
在Activity
/Fragment
lifecycleScope.launch {
val book = viewModel.addBook()
// update UI
}
来应用响应式方法
我是 mvvm 的新手。所以我想问一下如何获取viewModelScope中执行的方法的结果。 在我的示例中,我想在数据库中保存一本书并检索保存的书。有更好的方法吗?
fun addBook (book:Book): BookEntity {
var bookEntity = BookEntity()
viewModelScope.launch {
bookEntity = repository.addBook(book)
}
return bookEntity
}
使用launch
构建器在addBook
方法中启动的协程将在函数returns之后执行,因此bookEntity
不会被重新分配新值来自数据库。您应该考虑如何使用这些数据。如果您希望它仅用作某些其他计算的输入数据,那么制作 addBook()
函数 suspend
:
suspend fun addBook(): BookEntity {
val bookEntity = repository.addBook(book) // I assume function repository.addBook(book) is suspend
return bookEntity
}
如果你想让它显示在 UI 中,你可以像上面那样把它设为 suspend
并使用 lifecycleScope
:
在Activity
/Fragment
lifecycleScope.launch {
val book = viewModel.addBook()
// update UI
}
来应用响应式方法