簡體   English   中英

嘗試通過 email firebase 實現發送重置密碼時應用程序崩潰

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

我進行了一些更改以向用戶發送重置通行證 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代碼

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() {
}

}

日志

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)

你永遠不會初始化你的mAuth

mAuth = FirebaseAuth.getInstance();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM