为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2022-10-12 10:09:52
我在尝试登录之前检查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                }            }        });
查看完整描述

4 回答

?
MM们

TA贡献1886条经验 获得超2个赞

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


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


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();

    }

}

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


查看完整回答
反对 回复 2022-10-12
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您的代码似乎是正确的

尝试使用try/catch()子句


查看完整回答
反对 回复 2022-10-12
?
POPMUISE

TA贡献1765条经验 获得超5个赞

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


这是检查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

                            }

                        }


                    });

        }


查看完整回答
反对 回复 2022-10-12
?
大话西游666

TA贡献1817条经验 获得超14个赞

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


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

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

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


 if (**emailStr**.isEmpty()) 

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

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


注册完成后(它使用 a.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 中的字符串。我不需要编写新方法,因为我没有在其他任何地方使用它。


查看完整回答
反对 回复 2022-10-12
  • 4 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号