为什么匿名者在使用 Kotlin 时返回 false?



我正在使用 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
}

最新更新