电子邮件验证不工作(android应用程序)

电子邮件验证不工作(android应用程序),android,Android,我正在开发一个android应用程序,我面临一些问题。 我正在android studio中为忘记密码编写一个活动(我正在使用Firebase),但由于一些奇怪的原因,它不起作用。当你看到代码时,你就会得到它。我希望你们中的一些天才能帮助我:) 代码: 干杯 Kaspar您只需要像下面这样更新代码 mForgotButton.setOnClickListener(new View.OnClickListener(){ @Override pub

我正在开发一个android应用程序,我面临一些问题。 我正在android studio中为忘记密码编写一个活动(我正在使用Firebase),但由于一些奇怪的原因,它不起作用。当你看到代码时,你就会得到它。我希望你们中的一些天才能帮助我:)

代码:

干杯
Kaspar

您只需要像下面这样更新代码

 mForgotButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View V){

                mForgotEmail.addTextChangedListener(new TextWatcher() {
                    public void afterTextChanged(Editable s) {

                        if (forgotEmail.matches(emailPattern) && s.length() > 0)
                        {
                            mForgotButton.setVisibility(View.INVISIBLE);
                            mForgotEmail.setVisibility(View.INVISIBLE);
                            mProgressBar.setVisibility(View.VISIBLE);
                            fAuth.sendPasswordResetEmail(forgotEmail)
                              .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
 Toast.makeText(Forgot.this, "Check your email!", Toast.LENGTH_SHORT).show();
 startActivity(new Intent(getApplicationContext(),Login.class));
                                    }
                                    else{ //Do Something
                                        }
                                }
                            });;
                           
                          
                        }
                        else
                        {
                            mForgotEmail.setError("Enter Valid Email Address");
                            mForgotEmail.requestFocus();
                        }
                    }
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                        // other stuffs
                    }
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                        // other stuffs
                    }
                });
            }
        });
mForgotButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图V){
mForgotEmail.addTextChangedListener(新的TextWatcher(){
公共无效后文本已更改(可编辑){
if(forgotEmail.matches(emailPattern)和&s.length()>0)
{
mForgotButton.setVisibility(View.INVISIBLE);
mForgotEmail.setVisibility(View.INVISIBLE);
mProgressBar.setVisibility(View.VISIBLE);
fAuth.sendPasswordResetEmail(放弃邮件)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(忘记了。这个“检查你的电子邮件!”,Toast.LENGTH\u SHORT.show();
startActivity(新意图(getApplicationContext(),Login.class));
}
否则{//做点什么
}
}
});;
}
其他的
{
设置错误(“输入有效的电子邮件地址”);
mForgotEmail.requestFocus();
}
}
更改前文本之前的公共void(字符序列s、int start、int count、int after){
//其他东西
}
public void onTextChanged(字符序列、int start、int before、int count){
//其他东西
}
});
}
});

您只需要像下面这样更新代码

 mForgotButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View V){

                mForgotEmail.addTextChangedListener(new TextWatcher() {
                    public void afterTextChanged(Editable s) {

                        if (forgotEmail.matches(emailPattern) && s.length() > 0)
                        {
                            mForgotButton.setVisibility(View.INVISIBLE);
                            mForgotEmail.setVisibility(View.INVISIBLE);
                            mProgressBar.setVisibility(View.VISIBLE);
                            fAuth.sendPasswordResetEmail(forgotEmail)
                              .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
 Toast.makeText(Forgot.this, "Check your email!", Toast.LENGTH_SHORT).show();
 startActivity(new Intent(getApplicationContext(),Login.class));
                                    }
                                    else{ //Do Something
                                        }
                                }
                            });;
                           
                          
                        }
                        else
                        {
                            mForgotEmail.setError("Enter Valid Email Address");
                            mForgotEmail.requestFocus();
                        }
                    }
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                        // other stuffs
                    }
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                        // other stuffs
                    }
                });
            }
        });
mForgotButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图V){
mForgotEmail.addTextChangedListener(新的TextWatcher(){
公共无效后文本已更改(可编辑){
if(forgotEmail.matches(emailPattern)和&s.length()>0)
{
mForgotButton.setVisibility(View.INVISIBLE);
mForgotEmail.setVisibility(View.INVISIBLE);
mProgressBar.setVisibility(View.VISIBLE);
fAuth.sendPasswordResetEmail(放弃邮件)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(忘记了。这个“检查你的电子邮件!”,Toast.LENGTH\u SHORT.show();
startActivity(新意图(getApplicationContext(),Login.class));
}
否则{//做点什么
}
}
});;
}
其他的
{
设置错误(“输入有效的电子邮件地址”);
mForgotEmail.requestFocus();
}
}
更改前文本之前的公共void(字符序列s、int start、int count、int after){
//其他东西
}
public void onTextChanged(字符序列、int start、int before、int count){
//其他东西
}
});
}
});

好的,在这个实现中,您可能想了解一些事情,但是第一件事是第一件事-当前在
TextWatcher
中,您的评估对象是
ForgotMail
,而不是
s
变量,该变量在文本更改时被传递到
afterTextChanged(…)

这意味着,
forgotEmail
将首先设置为空字符串(在
onCreate(…)
中),然后每当
EditText
的内容更改时,这就是您要“验证”的内容

建议:

if(forgotEmail.matches(emailPattern)和&s.length()>0)更改为
if(s.length()>0和&s.toString().matches(emailPattern))
,您应该会得到更准确的“验证”

两个额外的想法:

  • 。您可能应该选择存在
    @
    的“最低限度”(基本上是
    [^@]+@[^@]+
    ),或者找到一个库来帮助您验证电子邮件地址的实际标准

  • 您当前每次单击按钮都会添加一个
    TextWatcher
    。您可以(应该?)在
    onCreate(…)
    中添加
    TextWatcher
    ,但我认为您试图避免的是初始键入时出现错误状态。您可以只保留一个布尔变量,以便知道是否曾经尝试提交表单一次(=释放即时验证)


  • 好的,在这个实现中您可能需要研究一些事情,但是