简体   繁体   English

尝试通过 email firebase 实现发送重置密码时应用程序崩溃

[英]Application crashed when trying to send reset password by email firebase implementation

I have made some changes to send a reset pass email to the user.我进行了一些更改以向用户发送重置通行证 email。 My java code first validates the email and then checks for the email if it exits, if the email exits the reset email must be sent but while i click the app crash my code is good until it checks the email is present or not but its not sending reset email My java code first validates the email and then checks for the email if it exits, if the email exits the reset email must be sent but while i click the app crash my code is good until it checks the email is present or not but its not发送复位 email

Java Code Java代码

public class forgotpass extends AppCompatActivity {
TextInputLayout regEmail,regUsr;
ProgressDialog progressDialog;
Button forgotPass;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_forgotpass);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    regEmail=findViewById(R.id.emailfield);
    regUsr=findViewById(R.id.usrnamefield);
    progressDialog = new ProgressDialog(this);

}


private Boolean validateusrEmail() {

    String ews = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
    String val = regEmail.getEditText().getText().toString();
    if (val.isEmpty()) {
        regEmail.setError("Field cannot be empty");
        return false;
    } else if (!val.matches(ews)) {
        regEmail.setError("Invalid Email address");
        return false;
    } else {
        regEmail.setError(null);
        regEmail.setErrorEnabled(false);
        return true;
    }

}
public void changepass(View view)
{
    if(!validateusrEmail())
    {return;}
    else {
        resetByemail();
    }
}
public void frgtUsername(View view)
{
    if(!validateusrEmail())
    {return;}
    else {
        showUsername();
    }
}

private void showUsername() {
}

private void resetByemail() {

    final String enteredEmail = regEmail.getEditText().getText().toString().trim();
    DatabaseReference reference= FirebaseDatabase.getInstance().getReference("users");
    Query checkUser = reference.orderByChild("email").equalTo(enteredEmail);
    checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists())
            {
                regEmail.setError(null);
                regEmail.setErrorEnabled(false);
                sendPass(enteredEmail);
            }else{
                regEmail.setError("No such email found.Please entered verified email.");
                regEmail.requestFocus();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

private void sendPass(String enteredEmail) {
    progressDialog.setMessage("Sending Email....");
    progressDialog.show();
    mAuth.sendPasswordResetEmail(enteredEmail)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            progressDialog.dismiss();
            if(task.isSuccessful()){
                Toast.makeText(forgotpass.this, "Reset Email Sent", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(forgotpass.this, "Failed to send email", Toast.LENGTH_SHORT).show();
            }

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            progressDialog.dismiss();
            Toast.makeText(forgotpass.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });
}

private Boolean validateusrName() {
    String val = regUsr.getEditText().getText().toString();
    if (val.isEmpty()) {
        regUsr.setError("Field cannot be empty");
        return false;
    } else {
        regUsr.setError(null);
        regUsr.setErrorEnabled(false);
        return true;
    }

}
public void onUsernameCheck(View view)
{
    if(!validateusrName())
    {return;}
    else {
        showEmail();
    }
}

private void showEmail() {
}

} }

LOG日志

2020-04-25 18:28:01.537 6414-6414/com.studenthelper.bscithelp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.studenthelper.bscithelp, PID: 6414
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.sendPasswordResetEmail(java.lang.String)' on a null object reference
    at com.studenthelper.bscithelp.forgotpass.sendPass(forgotpass.java:109)
    at com.studenthelper.bscithelp.forgotpass.access$000(forgotpass.java:25)
    at com.studenthelper.bscithelp.forgotpass$1.onDataChange(forgotpass.java:91)
    at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.2.1:179)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

You never initialize your mAuth :你永远不会初始化你的mAuth

mAuth = FirebaseAuth.getInstance();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当提供商是电子邮件/密码时,如何仅发送密码重置 email - How to only send password reset email when the provider is email/password 使用 Android 中的 Firebase 更改密码时应用程序崩溃 - Application crashed while change password with Firebase in Android 发送密码重置电子邮件方法使应用程序崩溃 - Send password reset email method crashes the app 自定义登录中的Firebase Android重置密码(不适用于电子邮件身份验证) - Firebase Android reset password in custom Login (not with email authentication) Java Firebase 如果字符串为 null,则不发送密码重置 - Java Firebase Do not send password reset if the string is null 使用Firebase身份验证通过电子邮件/密码将Firebase连接到Android应用程序 - Connecting Firebase to Android application using Firebase authentication via email/password 使用Firebase重设密码 - Reset password with firebase 尝试在具有 TextChangedListener 的编辑文本上输入时应用程序崩溃 - Application Crashed when trying to input on an edittext that has an TextChangedListener 尝试从 TextView 获取值并将其发送到 firebase 参考,但应用程序正在崩溃 - Trying to get the value from the TextView and send it to the firebase reference but app is getting crashed 使用电子邮件和密码进行 Firebase 身份验证 - Firebase Authentication With Email & Password
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM