#android #firebase #authentication #kotlin
#Android #firebase #аутентификация #kotlin
Вопрос:
Я пытаюсь установить свою переменную внутри функции входа, предоставляемой firebase.
Я попытался переместить свою переменную, чтобы она стала глобальной переменной, но, похоже, это не сработало. isValid — моя проблемная переменная. Кажется, что аутентификация прошла успешно, и регистрируется, что случай верен, однако значение не остается верным вне этого.
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) {task ->
// why doesn't this set isvalid to true
this.isValid = if(task.isSuccessful) {
Log.d(TAG, "hey auth actually worked!")
true
} else {
Log.d(TAG, "let's try that again")
false
}
}
Я инициализирую значение isValid равным false, и хотя я устанавливаю его равным true, как показано выше, значение по-прежнему равно false.
Комментарии:
1.
signInWithEmailAndPassword
является асинхронным и возвращается непосредственно перед вызовом обратного вызова. Вы уверены, что просто не пытаетесь проверитьisValid
до того, как произойдет обратный вызов?2. Лол, я только что понял это, я добавил больше журналов и понял, что переменная устанавливается после того, как я закончу с методом. И можете ли вы объяснить, что вы имеете в виду? Потому что я пытаюсь выяснить, есть ли у пользователя действительный адрес электронной почты / пароль, поэтому мне нужно, чтобы эта переменная была установлена, прежде чем я верну метод
3. Это будет невозможно без блокировки метода, что, вероятно, также означает блокировку основного потока, что также означает, что, возможно, вызывает ANR. Не делайте этого. Все API Firebase асинхронны по своей конструкции, и вы должны иметь дело с ними как с таковыми. Только не пытайтесь блокировать метод при асинхронной работе. medium.com/google-developers /…
4. Проще всего просто вызвать другую функцию из вашего обратного вызова, чтобы продолжить с того места, на котором вы остановились.
5. Это кажется намного проще, однако я не понимаю, потому что обратный вызов происходит после завершения моего метода, верно? Итак, даже если я вызываю функцию для установки своего значения, разве это не происходит после того, как все сделано?