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

时间:2019-04-17 13:37:09

标签: java android firebase validation

在尝试登录之前,我正在检查EditText etEmailetPass是否为空,但是我不知道这是否导致我的吐司消息出现问题,该消息使用火力基地task.getException().getMessage()

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

我尝试将其从else语句中删除,并使其正常运行。我有一个SignUp.class,它可以与firebase.getException().getMessage()一起使用SignUp.class不会检查EditText是否为空,所以这可能与问题有关。

我创建了一个根据EditText是否为空返回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
                }
            }

        });

然后,当EditText为空时,将使用另一个else语句。

                else {
                    progBar.setVisibility(View.INVISIBLE);
                    Toast.makeText(Login.this, "Please enter name and password",
                            Toast.LENGTH_LONG).show();
                }

4 个答案:

答案 0 :(得分:0)

您的代码似乎正确

尝试使用try/catch()子句

答案 1 :(得分:0)

我认为错误非常明显。对getMessage()的调用可能为null,因为task.getException()可能返回null。

在调用getMessage()之前,应确保任务异常不为null:

if (task.isSuccessful()) {
    ...
} else {
    Throwable taskException = task.getException();

    // Before invoking getMessage() on the exception,
    // we make sure the exception is not null
    if (taskException != null) {
        Toast.makeText(Login.this, taskException.getMessage(), Toast.LENGTH_LONG).show();
    }
}

作为参考,您可能还应该在制作和显示吐司之前,检查异常消息是否不为空。

答案 2 :(得分:0)

您必须对方法进行一些更改:-

这是检查edittext是否为空:-

public Boolean checkEmpty(EditText edittext) {
        if (edittext.getText().toString().isEmpty()){
            return true;
        }else{
            return false;
        }
    }

,这在您的onCreate方法中:-

if(checkEmpty(etEmail)) {
            Toast.makeText(StartActivity.this, "Email is empty", Toast.LENGTH_SHORT).show();
        }else if(checkEmpty(etPass)){
            Toast.makeText(StartActivity.this, "password is empty", Toast.LENGTH_SHORT).show();
        }else {
            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
                            }
                        }

                    });
        }

答案 3 :(得分:0)

我已经改进了代码,非常感谢所有答案,以帮助我了解更多。 我完全摆脱了checkEmpty()方法,选择在onClickListener中定义每个editText。

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

然后在if和else if语句中使用

 if (**emailStr**.isEmpty()) 
 else if (**passStr**.isEmpty())

带有“请输入密码”和“请输入电子邮件地址”的吐司消息。

注册完成后(它使用.addOnCompleteListener(task)来检查firebaseAuth.signInWithEmailAndPassword()),它会执行以下操作:

                            if (task.isSuccessful()) {
                            Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_LONG).show();
                            startActivity(new Intent(LoginActivity.this, Home.class));
                        } else {
                            Throwable taskException = task.getException();
                            if (taskException != null) {
                                Toast.makeText(LoginActivity.this, task.getException().getMessage(),
                                        Toast.LENGTH_LONG).show();
                            }
                        }

因此,它会在显示Firebase Toast消息之前先检查输入字段是否为空。我意识到我对checkEmpty方法过于复杂,因为我要做的就是将每个定义为onClickListener中的字符串。我不需要编写新方法,因为我没有在其他任何地方使用它。