获取 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
}

另一种方法是使用 LiveData or Kotlin Flow

来应用响应式方法