BruTe
BruTe

Reputation: 156

Android studio : FATAL EXCEPTION: main

while I testing my app, I get the following error in the Android-Studio-logcat:

before getting this error, I was clicked on setPositiveButton of alert Dialog Button name is "EMAIL ME" with empty EditText.

and then I got Unfortunately twist has stopped.
please I need help!!

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.testing.twist, PID: 30072
java.lang.IllegalArgumentException: Given String is empty or null
    at com.google.android.gms.common.internal.Preconditions.checkNotEmpty(Unknown
        Source)
    at com.google.firebase.auth.FirebaseAuth.sendPasswordResetEmail(com.google.firebase:firebase-auth@@19.3.1:307)
    at com.testing.twist.login.beginforgotpasswd(login.java:141)
    at com.testing.twist.login.access$400(login.java:26)
    at com.testing.twist.login$4.onClick(login.java:119)
    at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5268)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

here is some code of my login.java file

public class login extends AppCompatActivity {

    private EditText Email;
    private EditText password;
    private Button btn_login;
    private TextView tv_signup;
    private FirebaseAuth firebaseAuth;
    private TextView tv_forgotpasswd_l;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        Email = (EditText)findViewById(R.id.et_email_l);
        password = (EditText)findViewById(R.id.et_passwd_l);
        btn_login = (Button)findViewById(R.id.btn_l);
        tv_signup = (TextView)findViewById(R.id.tv_sign_up);
        tv_forgotpasswd_l = (TextView)findViewById(R.id.tv_f_passwd);


        firebaseAuth = FirebaseAuth.getInstance();

        FirebaseUser user = firebaseAuth.getCurrentUser();
        if(user != null){
            finish();
            startActivity(new Intent(login.this, MainActivity.class));
        }

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                validate(Email.getText().toString(), password.getText().toString());
            }
        });

        tv_signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(login.this,Register.class));
            }
        });

        // Login button hide

        Email.addTextChangedListener(loginTextWatcher);
        password.addTextChangedListener(loginTextWatcher);

        // recover pass textview click
        tv_forgotpasswd_l.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showForgotpasswdDialog();
            }
        });

    }
    // Alert Dialog
    private void showForgotpasswdDialog()
    {
        //Dialog Box code
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Forgot your password?");
        //set linear layout
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        linearLayout.setPadding(30,30,30,30);
        Email.setPadding(10,10,10,10);
        //view to set an dialog
        final EditText Email = new EditText(this);
        Email.setHint("Email");
        Email.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
        //text view
        linearLayout.addView(Email);
        builder.setView(linearLayout);
        //text style

        // Text view
        final TextView tv = new TextView(this);
        tv.setTextSize(14);
        tv.setTypeface(null, Typeface.BOLD);
        tv.setTextColor(Color.parseColor("black"));
        tv.setText("Unfortunately, if you have never given us your email, we will not be able to reset your password.");
        tv.setPadding(10,10,10,10);
        linearLayout.addView(tv);
        builder.setView(linearLayout);

        //buttons for EMAIL ME
        builder.setPositiveButton("EMAIL ME", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
            //input email
                String email = Email.getText().toString().trim();
                beginforgotpasswd(email);
            }
        });
        //buttons for CANCEL
        builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                // dismiss dialog
                dialog.dismiss();
            }
        });

        ///show dialog
        builder.create().show();
    }

    private void beginforgotpasswd(String email)
    {
        firebaseAuth.sendPasswordResetEmail(email).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task)
            {
                if (task.isSuccessful())
                {
                Toast.makeText(login.this,"Email sent",Toast.LENGTH_SHORT).show();
                }
                    else
                    {
                        Toast.makeText(login.this,"Failed...",Toast.LENGTH_SHORT).show();
                    }

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
            //get and show proper error message
                Toast.makeText(login.this,""+e.getMessage(),Toast.LENGTH_SHORT).show();
            }
        });
    }



    private TextWatcher loginTextWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String emailInput = Email.getText().toString().trim();
            String passwdInput = password.getText().toString().trim();

            btn_login.setEnabled(!emailInput.isEmpty() && !passwdInput.isEmpty());
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };



    private void validate(String usremail, String usrpassword){


        firebaseAuth.signInWithEmailAndPassword(usremail,usrpassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(Task<AuthResult> task) {
                if(task.isSuccessful()){
                    //Toast.makeText(login.this, "Login Successful",Toast.LENGTH_SHORT).show();
                    checkEmailVerification();
                }
                else{
                    Toast.makeText(login.this, "Login Failed",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void checkEmailVerification()
    {
        FirebaseUser firebaseUser = firebaseAuth.getInstance().getCurrentUser();
        Boolean emailflag = firebaseUser.isEmailVerified();

        if(emailflag)
        {
            finish();
            startActivity(new Intent(login.this,MainActivity.class));
        }
        else
        {
            Toast.makeText(login.this, "Verify your email", Toast.LENGTH_SHORT).show();
            firebaseAuth.signOut();
        }
    }
}

Upvotes: 1

Views: 197

Answers (1)

EraftYps
EraftYps

Reputation: 818

The call to firebaseAuth.sendPasswordResetEmail requires that the email you're sending the forgot password email to is not empty. Before calling the function check if the email is not empty.

private void beginforgotpasswd(String email)
    {
        if(email.isEmpty()) {
          // display toast
        } else {
          firebaseAuth.sendPasswordResetEmail(email).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task)
            {
                if (task.isSuccessful())
                {
                Toast.makeText(login.this,"Email sent",Toast.LENGTH_SHORT).show();
                }
                    else
                    {
                        Toast.makeText(login.this,"Failed...",Toast.LENGTH_SHORT).show();
                    }

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
            //get and show proper error message
                Toast.makeText(login.this,""+e.getMessage(),Toast.LENGTH_SHORT).show();
            }
        });
        }
    }

Upvotes: 2

Related Questions