Как назначить значения внутри лямбда-выражения - PullRequest
0 голосов
/ 20 января 2020

В Android я изучал аутентификацию в firebase. Я хочу сохранить логическое значение в переменной, определяющей, была ли задача успешной или нет. Вот мой код: -

fun signIn(userEmail: String, userPassword: String): Boolean {
    var successful = false
    mAuth.signInWithEmailAndPassword(userEmail, userPassword)
        .addOnCompleteListener {
            successful = it.isSuccessful
            Log.d(TAG, "successful = $successful")
        }
    Log.d(TAG, "successful = $successful")
    return successful
}

Когда этот метод вызывается, успешная переменная внутри функции высшего порядка меняется на true, но она не действует, когда она выходит наружу. Вот мой файл журнала: -

D/UserAuthentication: successful = true
D/UserAuthentication: successful = false

Как мне это исправить?

1 Ответ

2 голосов
/ 20 января 2020

Ваш внутренний журнал вызывается после вашего внешнего журнала, потому что метод signInWithEmailAndPassword является асинхронным

Сделайте что-то вроде этого:

fun signIn(userEmail: String, userPassword: String, callback: (Task<AuthResult>) -> Unit) {
     mAuth.signInWithEmailAndPassword(userEmail, userPassword)
        .addOnCompleteListener {
            callback.invoke(it)
        }
}

Затем вызовите эту функцию следующим образом:

signIn("your_username", "your_password") {
    if(it.isSuccessfull){
         //Your login was successfull
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...