![](/img/trans.png)
[英]How to only send password reset email when the provider is email/password
[英]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.