Firebase Auth для Android: createUserWithEmailAndPassword работает поздно - PullRequest
0 голосов
/ 24 апреля 2019

Я правильно написал код, используя createUserWithEmailAndPassword для Android. Я написал статические конечные целочисленные константы для создания учетной записи, успешно или не успешно (этот адрес электронной почты уже используется):

public static final int SUCCESSFUL = 100;
public static final int EMAIL_IS_ALREADY_USED = 101;

Существует способ создания новой учетной записи:

public static int createAnAccount(String email, String password, final Context ctx) {
  final int[] res = new int[1];
  mAuth.createUserWithEmailAndPassword(email, password)
      .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
          if (task.isSuccessful()) {
            // User has registered successfully...
            res[0] = SUCCESSFUL;
            Toast.makeText(ctx, "First has worked - Registered!!!", Toast.LENGTH_LONG).show();
          } else {
            try {
              throw task.getException();
            } catch (FirebaseAuthUserCollisionException e) {
              // That email address is already used...
              res[0] = EMAIL_IS_ALREADY_USED;
              Toast.makeText(ctx, "First has worked - This email is already used!", Toast.LENGTH_LONG).show();
            } catch (Exception e) {
              // Undefined error...
              e.printStackTrace();
            }
          }
        }
      });
  Toast.makeText(ctx, "Second has worked - Value of res[0] = " + res[0], Toast.LENGTH_LONG).show();
  return res[0];
}

Я хотел узнать, что пользователь успешно зарегистрирован или электронная почта уже используется. Для этого я хотел вернуть SUCCESSFUL, если task.isSuccessful() равно true, вернуть EMAIL_IS_ALREADY_USED, если task.isSuccessful() равно false, но я не смог вернуть значения из метода onComplete(), потому что это anonymous inner class method , Итак, я использовал res целочисленный массив. Значение res равно SUCCESSFUL, если isSuccessful() is true, или EMAIL_IS_ALREADY_USED, если isSuccessful() is false.

.

Он всегда работает правильно, если какой-либо пользователь зарегистрировался или использовал уже зарегистрированный адрес электронной почты. Я должен увидеть сначала First has worked - bla bla bla сообщение, а затем Second has worked - Value of res[0] = bla bla сообщение. Но сначала сработало Second has worked - ... сообщение, а затем First has worked - ... сообщение. Я знаю проблему. Проблема в том, что Second has worked тостовое сообщение и return res[0] работают до onComplete() метода. Я имею в виду, что return res[0] работает до того, как значение res[0] не указано в onComplete. Как я могу решить проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...