在我的一些用户使用电子邮件和密码登录的时候,我遇到了一个问题。这种情况下,在发送验证电子邮件后,我将调用当前FirebaseUser中的reload来更新currentUser,以了解电子邮件是否经过验证。
此时,一切都运行正常。问题是,有时在FirebaseAuth.currentUser.reload()的实例上调用reload之后,在reload的成功回调中,我试图再次访问已经更新的FirebaseAuth.currentUser实例,有趣的是,当用户已经成功重新加载并且实例应该更新而不是删除时,这变成了null,并且我得到了NPE。
这是我现在的代码:
override fun verifyUser() {
if (authInstance.currentUser == null) {
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestFailure(FirebaseUserNotFound()),
verified = false))
return
}
RxFirebaseUser.reload(authInstance.currentUser!!)
.subscribeOn(Schedulers.io())
.subscribe({
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestSuccess(),
verified = authInstance.currentUser!!.isEmailVerified))
}, { error ->
dispatcher.dispatchOnUi(VerifyUserEmailCompleteAction(requestState = requestFailure(error),
verified = false))
})
}RxFirebase调用是Firebase上的反应式包装器,但我也使用库的普通Promise尝试了此代码,并且此错误也正在发生。
我的NPE出现在verified= authInstance.currentUser!!.isEmailVerified上,这应该是不可能的,因为我在启动此调用之前已经做了检查,并且reload调用已经成功。
有人遇到过这个问题,并知道为什么会发生这种情况?如何解决这个问题?我可以在那里控制NPE,但是如果重新加载成功,我想在我的应用程序数据中更新我的用户,而不是发送空实例。
https://stackoverflow.com/questions/50268128
复制相似问题