Я правильно написал код, используя 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
.
Как я могу решить проблему?