我正在使用 MVVM 体系结构来检查用户是否匿名登录。在我的存储库类中,我有这个字段:
val isUserAnonymous = FirebaseAuth.getInstance().currentUser?.isAnonymous
在 ViewModel 类中,我有:
val isUserAnonymous = repository.isUserAnonymous
在我的活动中,我使用这样的东西:
R.id.sign_out_button -> {
if (mainViewModel.isUserAnonymous!!) {
Log.d("TAG", "isUserAnonymous: " + isUserAnonymous) //False
}
}
成功登录并按下唱出按钮后,isUserAnonymous
被评估为false。但是,如果我使用:
R.id.sign_out_button -> {
if (FirebaseAuth.getInstance().currentUser!!.isAnonymous) {
Log.d("TAG", "isUserAnonymous: " + isUserAnonymous) //True
}
}
isAnonymous
的计算结果为true。为什么?当我在存储库类中使用代码时,如何获取 true 的值?
您应该isUserAnonymous
实现更改为:
val isUserAnonymous: Boolean?
get() = repository.isUserAnonymous // in view model
val isUserAnonymous: Boolean?
get() = FirebaseAuth.getInstance().currentUser?.isAnonymous // in repository
当您为变量声明get()
方法而不是支持返回field
值时,您可以返回在调用此变量时计算的值。
这类似于编写两个方法而不是变量:
// in view model
fun isUserAnonymous(): Boolean? {
return repository.isUserAnonymous
}
// in repository
fun isUserAnonymous(): Boolean? {
return FirebaseAuth.getInstance().currentUser?.isAnonymous
}