【问题标题】:Why is isAnonymous returning false when using Kotlin?为什么 isAnonymous 在使用 Kotlin 时返回 false?
【发布时间】:2020-10-07 04:41:59
【问题描述】:

我正在使用 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 的值?

【问题讨论】:

    标签: android firebase kotlin firebase-authentication


    【解决方案1】:

    您应该将 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
    }
    

    【讨论】:

    • 哇,真的很管用。非常感谢您的快速回复。投票赞成。我会在 15 分钟后接受你的答复。
    猜你喜欢
    • 2014-04-28
    • 2012-08-13
    • 1970-01-01
    • 2013-09-18
    • 2011-05-22
    • 1970-01-01
    • 2014-11-17
    • 2014-03-11
    • 2019-07-12
    相关资源
    最近更新 更多