userMethod.value 即使在日志记录正确值的情况下也采用空值

问题描述 投票:0回答:1
 override fun detectMethod(): MutableLiveData<String> {
        val userMethod = MutableLiveData<String>()
        mAuth.addAuthStateListener {
            val currentUser = mAuth.currentUser
            if (currentUser!!.providerData.size > 0) {
                Log.d("inside if",currentUser.providerData[currentUser.providerData.size - 1].providerId)
                userMethod.value =
                    currentUser.providerData[currentUser.providerData.size - 1].providerId
            }
        }
        Log.d("repository", userMethod.value.toString())
        return userMethod
    }

我需要 userMethod.value 中的值 currentUser.providerData[currentUser.providerData.size - 1].providerId

android firebase kotlin mvvm firebase-authentication
1个回答
0
投票

如果你想读取

LiveData
对象内部存在的值,你不应该检查对象内部存在的
value
字段,你必须观察变化,否则,
value
将永远是
null 
。因此,请查看有关如何开始观察
LiveData
对象
的官方文档。在代码中,它会很简单:

val observer = Observer<String> { providerId ->
    Log.d("TAG", providerId)
}
userMethod.observe(this, observer)

但是由于您使用的是 Kotlin,我建议您使用更优雅的方式来实现相同的目标。如今,最好使用Kotlin CoroutineAsynchronous Flow。所以我认为这个资源会有所帮助。这是相应的repo

© www.soinside.com 2019 - 2024. All rights reserved.