В приведенном ниже примере я вызываю метод signinUser(username, password)
Затем он запускается через Firebase, чтобы определить, смог ли пользователь успешно или неудачно войти в систему. Однако для этого требуется Firebase небольшое количество времени, что к этому времени метод уже вернулся с исходным значением, прежде чем он был обновлен в соответствии с успешностью / неуспешностью процесса входа в систему.
Как бы я мог вернуть метод после того, как аутентификация Firebase сделала это? Я знаю, что мог бы включить таймер при вызове оператора return, однако я не уверен, как это будет работать, так как медленное подключение к Интернету может привести к тому, что оно займет больше времени, чем заданное таймером количество.
Мой код выглядит следующим образом:
public AuthSuccess signinUser(String username, String password) {
mAuth.signInWithEmailAndPassword(username + "@debugrestaurant.com", password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(context, "Successful!", Toast.LENGTH_SHORT).show();
authSuccess = new AuthSuccess(true, null);
} else {
Toast.makeText(context, "Unsuccessful!", Toast.LENGTH_SHORT).show();
authSuccess = new AuthSuccess(false, task.getException());
Toast.makeText(context, "Exception: " + authSuccess.getException().getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
}
});
return authSuccess;
}
Обратите внимание, что класс AuthSuccess
- это просто объект, который я создал, чтобы собрать, был ли вход успешным, а если нет, чтобы собрать исключение.