gpt4 book ai didi

android - 从 ViewModel 观察存储库 LiveData 并通知 UI

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:17 24 4
gpt4 key购买 nike

Google 表示不可能从 ViewModel 观察 LiveData:

[...] However ViewModel objects must never observe changes to lifecycle-aware observables, such as LiveData objects.[...]

我会在 ViewModel 中处理 repo.login() 结果并通知 UI 认为这两个 SingleLiveEvent s,这可能吗?

class Repository {
// .... //
fun login(user:String, password:String): LiveData<Status> { /* ... */ }
}

class LoginViewModel : ViewModel() {

@Inject
lateinit var repo: Repository

private var auth = MutableLiveData<User>()
private var showErrorEvent = SingleLiveEvent<String>()
private var showSuccessEvent = SingleLiveEvent<String>()

// Called from UI
fun performLogin(user:User){
repo.login(user.name, user.password)
// We can't observe the result here
// and update error/success events
}

// Called from UI
fun getErrorEvent() = showErrorEvent

// Called from UI
fun getSuccessEvent() = showSuccessEvent

}

最佳答案

我认为官方指南是使用 transformation 在 ViewModel 中组合多个实时数据。 .然而,通常我更喜欢只在 ViewModel 和 View 之间的通信中使用 livedatas,在我使用 RxJava 或协程的存储库中。因此,在您的示例中,我将修改存储库中的 login 方法以返回 Single 而不是实时数据,并在 ViewModel 中订阅它。然后,您可以在 ViewModel 被销毁时取消订阅。您可以在此 repository 中找到此架构的示例.

关于android - 从 ViewModel 观察存储库 LiveData 并通知 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com