Kotlin Firebase onFailureListener пустое исключение - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь обновить электронную почту пользователя в моем приложении для Android. И все работает нормально, если доступно новое письмо. Когда это не так - onFailureListener вызывает. Но когда я пытаюсь получить исключение от этого слушателя, оно пустое, и я не могу получить тип этого исключения. Зачем? Код ниже.

private fun reauthenticateAndUpdateEmail(password: String, newEmail: String){
    val credentials = EmailAuthProvider.getCredential(auth.currentUser!!.email!!, password)
    auth.currentUser!!.reauthenticate(credentials).addOnCompleteListener(object : OnCompleteListener<Void> {
        override fun onComplete(p0: Task<Void>) {
            if (p0.isSuccessful) {
                auth.currentUser!!.updateEmail(newEmail).addOnSuccessListener {
                    interractor.emailChanged()
                }.addOnFailureListener { exception ->
                    interractor.emailChanged(false, handleException(p0.exception))
                }
            } else interractor.emailChanged(false, handleException(p0.exception))
        }
    })
}

private fun handleException(exception: Exception?): String{
    //exception is null
    when(exception){
        is FirebaseAuthUserCollisionException -> return "E-mail address is not available"
        is FirebaseNetworkException -> return "No network"
        else -> return "Try again later."
    }
}

Заранее спасибо и хорошего дня.

1 Ответ

1 голос
/ 02 июля 2019

Попробуйте заменить

.addOnFailureListener { exception ->
                    interractor.emailChanged(false, handleException(p0.exception))
                }

на

.addOnFailureListener { exception ->
                    interractor.emailChanged(false, handleException(exception))
                }

Вы также можете защитить свой метод handleException: Заменить

    when(exception){
        is FirebaseAuthUserCollisionException -> return "E-mail address is not available"
        is FirebaseNetworkException -> return "No network"
        else -> return "Try again later."
    }

на

    exception?.let {
          when(it){
             is FirebaseAuthUserCollisionException -> return "E-mail address is not available"
             is FirebaseNetworkException -> return "No network"
             else -> return "Try again later."
          }
    }
return "Unknown error"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...