Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在if条件下使用异常_Java_Exception_Firebase Authentication - Fatal编程技术网

Java 在if条件下使用异常

Java 在if条件下使用异常,java,exception,firebase-authentication,Java,Exception,Firebase Authentication,我正在使用Firebase Auth来管理我的登录并注册应用程序 我想根据收到的异常添加toast消息 例如,如果异常来自FirebaseAuthInvalidCredentialsException,则我想发送一条消息。如果它来自FirebaseAuthUserCollisionException,那么我想使用另一个toast 我用的是: auth.createUserWithEmailAndPassword(email, password) .addOnCompleteLis

我正在使用
Firebase Auth
来管理我的登录并注册应用程序

我想根据收到的异常添加toast消息

例如,如果异常来自
FirebaseAuthInvalidCredentialsException
,则我想发送一条消息。如果它来自
FirebaseAuthUserCollisionException
,那么我想使用另一个toast

我用的是:

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();
                }
            }
        });
auth.createUserWithEmailAndPassword(电子邮件,密码)
.addOnCompleteListener(SignUpActivity.this,new OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
LayoutFlater充气机=LayoutFlater.from(SignUpActivity.this);
视图toast视图=充气机。充气(R.layout.toast\u注册,空);
Toast Toast=新Toast(SignUpActivity.this);
toast.setView(toast视图);
toast.setGravity(Gravity.CENTER,0,3);
toast.setDuration(toast.LENGTH\u LONG);
toast.show();
}
如果(!task.issusccessful()){
Toast.makeText(SignUpActivity.this,“Toast 1.”+task.getException(),
吐司。长度(短)。show();
}
如果(!task.issusccessful()){
Toast.makeText(SignUpActivity.this,“Toast 2.”+task.getException(),
吐司。长度(短)。show();
}否则{
startActivity(新意图(SignUpActivity.this、MainActivity.class));
完成();
}
}
});
所以基本上我需要在if条件中添加一些东西,但是我不确定是什么

我看到了catch的用法,但我认为情况并非如此


谢谢

首先,您只需要一个条件,如task.issusccessful()

你可以这样做:

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

您将抛出特定的异常,并使用

} catch(FirebaseAuthInvalidCredentialsException e) {
    /*Toast here*/
}
您将捕获特定异常以处理该异常并执行所需操作,在您的情况下,您将编写代码以在catch语句中显示toast

记住捕获所有异常,否则当抛出未处理的异常时,您的应用程序将崩溃

您还可以处理一般异常:

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

这应该可以做到:

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();
                }
            }
        });
auth.createUserWithEmailAndPassword(电子邮件,密码)
.addOnCompleteListener(SignUpActivity.this,new OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
LayoutFlater充气机=LayoutFlater.from(SignUpActivity.this);
视图toast视图=充气机。充气(R.layout.toast\u注册,空);
Toast Toast=新Toast(SignUpActivity.this);
toast.setView(toast视图);
toast.setGravity(Gravity.CENTER,0,3);
toast.setDuration(toast.LENGTH\u LONG);
toast.show();
}
否则{
if(FirebaseAuthInvalidCredentialsException的task.getException()实例){
Toast.makeText(SignUpActivity.this,“Toast 1.”+task.getException(),
吐司。长度(短)。show();
}
else if(task.getException()实例为FirebaseAuthUserCollisionException){
Toast.makeText(SignUpActivity.this,“Toast 2.”+task.getException(),
吐司。长度(短)。show();
}   
startActivity(新意图(SignUpActivity.this、MainActivity.class));
完成();
}
}
});

因此,您需要检查任务是否成功,如果不成功,则在启动注册活动并完成此活动之前,打开错误类型并显示相应的toast。

您究竟为什么要尝试抛出已在底层框架中抛出并捕获的异常?您也不需要检查!isSuccessful(),因为根据定义,第一个检查检查的是它的倒数,所以您可以使用其他…@ThomasCook是的,对不起,我只是从答案中复制了代码。无论如何,我不喜欢使用多个条件,我认为try-catch清晰易读。很抱歉,这是一个非常糟糕的建议。您正在执行一个try,其唯一目的是抛出一个已捕获的异常,以便使用catch机制执行完全可以使用instanceof执行的类型检查。try应该执行可能失败的操作,而不是执行将失败的操作。它的名字叫“尝试”。该框架已经“尝试”完成了这项高风险的工作,甚至在传递给回调的值中结束了失败,因此您可以避免在消费端使用try-catch。在身份验证失败的情况下,您将在这里显示两个祝酒词。请看我的答案,它会处理您在问题中陈述的每个失败案例一次且仅一次,并删除冗余检查。在我的回答中,我假设您只想在身份验证失败的情况下启动SignupActivity。对不起,它是instanceof,现在更新我的答案(不是小写的o)。它是Java中的一个关键字,用于检查变量是否是类的实例。这是唯一可能发生的两个异常吗?如果没有,或者如果他们添加了第三个,那么您应该再添加一个
else
,作为总括,否则用户将看不到任何祝酒词。这不是保证,因此您提出了一个很好的观点。就像大卫所说的那样;始终检查边缘情况-在本例中,这是一般例外。但由于OP问题是关于2种异常类型的,我的答案应该特别指出这一点。这就是域逻辑,也许有一个r
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();
                }
            }
        });