电子邮件验证不工作(android应用程序)
我正在开发一个android应用程序,我面临一些问题。 我正在android studio中为忘记密码编写一个活动(我正在使用Firebase),但由于一些奇怪的原因,它不起作用。当你看到代码时,你就会得到它。我希望你们中的一些天才能帮助我:) 代码: 干杯电子邮件验证不工作(android应用程序),android,Android,我正在开发一个android应用程序,我面临一些问题。 我正在android studio中为忘记密码编写一个活动(我正在使用Firebase),但由于一些奇怪的原因,它不起作用。当你看到代码时,你就会得到它。我希望你们中的一些天才能帮助我:) 代码: 干杯 Kaspar您只需要像下面这样更新代码 mForgotButton.setOnClickListener(new View.OnClickListener(){ @Override pub
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
,但我认为您试图避免的是初始键入时出现错误状态。您可以只保留一个布尔变量,以便知道是否曾经尝试提交表单一次(=释放即时验证)
好的,在这个实现中您可能需要研究一些事情,但是