gpt4 book ai didi

android - 如何在存储库类MVVM中使用Firebase身份验证监听器?

转载 作者:行者123 更新时间:2023-12-03 11:01:25 26 4
gpt4 key购买 nike

这是我的MainActivity类:

class MainActivity : AppCompatActivity(), FirebaseAuth.AuthStateListener {
@Inject lateinit var auth: FirebaseAuth

override fun onAuthStateChanged(auth: FirebaseAuth) {
val firebaseUser = auth.currentUser
if (firebaseUser == null) {
//Update UI
}
}

override fun onStart() {
super.onStart()
auth.addAuthStateListener(this)
}

override fun onStop() {
super.onStop()
auth.removeAuthStateListener(this)
}
}

这意味着,例如,当FirebaseUser变为null(注销用户)时,我将相应地更新UI。它工作正常,但是对于MVVM, Activity 了解Firebase,这是 而不是正确的。我有这个结构:
Activity -> ViewModel - Repository (calls to Firebase)

如何在存储库类中监听auth更改?还是有其他解决方案?

最佳答案

在MVVM架构中,我们具有事件驱动的架构, View 模型发出的所有事件均由观察者发出,观察者将其从 View 中获取( Activity 或片段)
在您的案例中,存储库会处理获取用户的问题,然后将其提供给 View 模型,然后发出结果。
看看Google开发人员在GitHub上发布的SingleLiveEvent以获得架构示例:
https://github.com/android/architecture-samples/blob/dev-todo-mvvm-live/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/SingleLiveEvent.java
在这里,您可以使用singleLiveEvent一次观察更改,因为诸如您的用户状态的情况只是在请求用户状态触发后才发生变化。
在您的View模型中创建一个SingleLiveEvent,如下所示:

fun userState() : SingleLiveEvent<Boolean> = SingleLiveEvent()

然后 :
if(repo.getAuthUser() != null)
userState().postValue(true)

现在您应该像这样在您的 View 中观察它:
viewModel.userState().observe(this, Observer {
if (it!!)
//user is created
else
//user is null
})

为了在viewModel中处理onStart和onStop,您可以轻松使用Lifecycle-Aware组件:

在您的 View 中,添加关于将实现“LifecycleObserver”的观察者:
我将像这样将其放在我的viewModel上:
lifecycle.addObserver(viewModel)

然后通过从“LifecycleObserver”扩展viewModel使其成为观察者,并在内部处理如下生命周期:
类myViewModel:LifecycleObserver {
@OnLifecycleEvent(Event.ON_STOP)
fun onStop() {
//do some work1
}

@OnLifecycleEvent(Event.ON_START)
fun onStart() {
//do some work2
}

}

关于android - 如何在存储库类MVVM中使用Firebase身份验证监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62173323/

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