Сбой приложения при попытке отправить сброс пароля по электронной почте - PullRequest
0 голосов
/ 25 апреля 2020

Я внес некоторые изменения, чтобы отправить пользователю электронное письмо с пропуском сброса. Мой код java сначала проверяет электронную почту, а затем проверяет ее, если она выходит, если электронная почта выходит, необходимо отправить сообщение об ошибке, но пока я нажимаю на приложение, cra sh мой код исправен, пока не проверит наличие электронной почты или нет, но не отправляется сообщение об ошибке

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)

1 Ответ

1 голос
/ 25 апреля 2020

Вы никогда не инициализируете свой mAuth:

mAuth = FirebaseAuth.getInstance();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...