使用 firebase Toast 消息检查电子邮件和密码的 EditTexts 是否为空

我在尝试登录之前检查EditText etEmailandetPass是否为空,但我不知道这是否会导致我使用 firebase 的 toast 消息出现问题task.getException().getMessage()


这是错误消息:方法调用“ getMessage”可能会产生'java.lang.NullPointerException'


我已经尝试将它从 else 语句中取出并移动它正在工作。我有一个SignUp.class按预期工作的firebase.getException().getMessage()TheSignUp.class不检查 EditTexts 是否为空,所以这可能与问题有关。


我创建了一个方法来根据 EditTexts 是否为空来返回 true 或 false(passStr 与etPass.getText().toString()if 语句中的第二个总是返回 true 或总是 false 相同,所以我这样做是为了让它更容易,因为我不知道最好的方法)。


public Boolean checkEmpty(){

    status = false;

    passStr = etPass.getText().toString();

    emailStr = etEmail.getText().toString();


   if((etPass.getText().toString().isEmpty() && etEmail.toString().isEmpty()) ||

          (passStr.isEmpty()) || (emailStr.isEmpty()) ) {

            status = false;

    }

    else{

        status = true;

    }

    return status;

}

在它使用的 onCreate 方法内部


    if(checkEmpty().equals(true)) {



        firebaseAuth.signInWithEmailAndPassword(

        etEmail.getText().toString(),

        etPass.getText().toString())

        .addOnCompleteListener(new OnCompleteListener<AuthResult>() {

            @Override

            public void onComplete(@NonNull Task<AuthResult> task) {

                //this starts activity if able to sign in

                if (task.isSuccessful()) {

                    Toast.makeText(Login.this, "Login Successful", 

                                Toast.LENGTH_LONG).show();

                    startActivity(new Intent(Login.this,

                                MainActivity.class));

                }

                else {

                    //if task unsuccessful it should show firebase toast messages

                    Toast.makeText(Login.this, task.getException().getMessage(),

                    Toast.LENGTH_LONG).show(); 

                      //this getMessage does not work due to error above

                }

            }


        });


慕哥9229398
浏览 160回答 4
4回答

MM们

我认为错误非常明显。调用getMessage()可能为 null,因为task.getException()可能返回 null。在调用之前,您应该确保任务异常不为空getMessage():if (task.isSuccessful()) {&nbsp; &nbsp; ...} else {&nbsp; &nbsp; Throwable taskException = task.getException();&nbsp; &nbsp; // Before invoking getMessage() on the exception,&nbsp; &nbsp; // we make sure the exception is not null&nbsp; &nbsp; if (taskException != null) {&nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(Login.this, taskException.getMessage(), Toast.LENGTH_LONG).show();&nbsp; &nbsp; }}为了您的信息,您可能还应该在制作和显示吐司之前检查异常消息是否不为空。

哆啦的时光机

您的代码似乎是正确的尝试使用try/catch()子句

POPMUISE

您必须对方法进行一些更改:-这是检查edittext是否为空:-public Boolean checkEmpty(EditText edittext) {&nbsp; &nbsp; &nbsp; &nbsp; if (edittext.getText().toString().isEmpty()){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }这是在您的 onCreate 方法中:-if(checkEmpty(etEmail)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(StartActivity.this, "Email is empty", Toast.LENGTH_SHORT).show();&nbsp; &nbsp; &nbsp; &nbsp; }else if(checkEmpty(etPass)){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(StartActivity.this, "password is empty", Toast.LENGTH_SHORT).show();&nbsp; &nbsp; &nbsp; &nbsp; }else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firebaseAuth.signInWithEmailAndPassword(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; etEmail.getText().toString(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; etPass.getText().toString())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .addOnCompleteListener(new OnCompleteListener<AuthResult>() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onComplete(@NonNull Task<AuthResult> task) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //this starts activity if able to sign in&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (task.isSuccessful()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(Login.this, "Login Successful",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.LENGTH_LONG).show();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startActivity(new Intent(Login.this,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MainActivity.class));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //if task unsuccessful it should show firebase toast messages&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(Login.this, task.getException().getMessage(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.LENGTH_LONG).show();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //this getMessage does not work due to error above&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; }

大话西游666

我已经改进了我的代码,我非常感谢所有帮助我理解更多的答案。我已经完全摆脱了该checkEmpty()方法,并选择在我的 onClickListener 中定义每个 editText。passStr = etPass.getText().toString();emailStr = etEmail.getText().toString();然后在 if 和 else if 语句中使用&nbsp;if (**emailStr**.isEmpty())&nbsp;&nbsp;else if (**passStr**.isEmpty())带有“请输入密码”和“请输入电子邮件地址”的吐司消息。注册完成后(它使用 a.addOnCompleteListener(task)来检查firebaseAuth.signInWithEmailAndPassword()),它会执行以下操作:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (task.isSuccessful()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_LONG).show();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startActivity(new Intent(LoginActivity.this, Home.class));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Throwable taskException = task.getException();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (taskException != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.makeText(LoginActivity.this, task.getException().getMessage(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.LENGTH_LONG).show();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }因此,它在显示 firebase toast 消息之前首先检查输入字段是否为空。我意识到我使用 checkEmpty 方法过于复杂了,因为我需要做的就是将每一个定义为 onClickListener 中的字符串。我不需要编写新方法,因为我没有在其他任何地方使用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java