Используйте исключения в условии if - PullRequest
2 голосов
/ 19 сентября 2019

Я использую Firebase Auth, чтобы управлять своим логином и зарегистрироваться для приложения.

Я хотел добавить тостовые сообщения, основываясь на полученном исключении.

Например,если исключение из FirebaseAuthInvalidCredentialsException я хотел бы выпить одно сообщение.Если это из FirebaseAuthUserCollisionException, тогда я хотел бы использовать другой тост.

Я использую что-то вроде:

auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    LayoutInflater inflater = LayoutInflater.from( SignUpActivity.this );
                    View toastview = inflater.inflate( R.layout.toast_registered, null );
                    Toast toast = new Toast( SignUpActivity.this );
                    toast.setView( toastview );
                    toast.setGravity( Gravity.CENTER, 0, 3 );
                    toast.setDuration( Toast.LENGTH_LONG );
                    toast.show();
                }

                if (!task.isSuccessful()) {
                    Toast.makeText(SignUpActivity.this, "toast1." + task.getException(),
                            Toast.LENGTH_SHORT).show();
                }

                if (!task.isSuccessful()) {
                    Toast.makeText(SignUpActivity.this, "toast2." + task.getException(),
                            Toast.LENGTH_SHORT).show();
                } else {
                    startActivity(new Intent(SignUpActivity.this, MainActivity.class));
                    finish();
                }
            }
        });

Так что в принципе мне нужно добавить что-то в условие if, но я неуверен, что.

Я видел использование catch, но я не думаю, что это ситуация.

Спасибо

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Это должно сделать это:

auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    LayoutInflater inflater = LayoutInflater.from( SignUpActivity.this );
                    View toastview = inflater.inflate( R.layout.toast_registered, null );
                    Toast toast = new Toast( SignUpActivity.this );
                    toast.setView( toastview );
                    toast.setGravity( Gravity.CENTER, 0, 3 );
                    toast.setDuration( Toast.LENGTH_LONG );
                    toast.show();
                }
                else {
                    if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                         Toast.makeText(SignUpActivity.this, "toast1." + task.getException(),
                         Toast.LENGTH_SHORT).show();
                    }
                    else if (task.getException() instanceof FirebaseAuthUserCollisionException) {
                         Toast.makeText(SignUpActivity.this, "toast2." + task.getException(),
                            Toast.LENGTH_SHORT).show();
                    }   
                    startActivity(new Intent(SignUpActivity.this, MainActivity.class));
                    finish();
                }
            }
        });

Итак, вы проверяете, была ли задача успешной, если нет, вы включаете тип ошибки и показывает соответствующий тост перед тем, как начать действие по подписке и завершить это действие.

0 голосов
/ 19 сентября 2019

Прежде всего вам нужно только одно условие, например task.isSuccessful ().

Вы можете сделать что-то подобное:

if(task.isSuccessful()) {
    try {
        throw task.getException();
    } catch(FirebaseAuthInvalidCredentialsException e) {
        /*Toast here*/
    } catch(FirebaseAuthUserCollisionException e) {
        /*Toast here*/
    } catch(...) ...
}

С

...
throw task.getException();
...

вы сгенерируете конкретное исключение, и с помощью

} catch(FirebaseAuthInvalidCredentialsException e) {
    /*Toast here*/
}

вы поймаете конкретное исключение, чтобы обработать это и сделать то, что вы хотите, в вашем случае вы напишите код для отображения тоста внутри оператора catch.

Не забудьте перехватить все исключения или при возникновении необработанного исключения произойдет сбой вашего приложения.

Вы также можете обработать универсальное исключение:

if(task.isSuccessful()) {
    try {
        throw task.getException();
    } catch(FirebaseAuthInvalidCredentialsException e) {
        /*Toast here*/
    } catch(FirebaseAuthUserCollisionException e) {
        /*Toast here*/
    } catch(Exception e) {
        /*Handle generic exception*/
    }
}

Пока

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