0

My application has a Progress Dialog for login process and when the orientation is changed while dialog box is open, app crashes.This all works fine, except when screen orientation changes while the dialog is up. At this point the app crashes. I am figuring out this issue from the last 3 nights but not able to get it, please help. My fragment:

public class Example extends Fragment {

private static final String TAG = "LoginActivity";
private static final int REQUEST_SIGNUP = 0;


Unbinder unbinder;

@BindView(R.id.input_email) EditText _emailText;
@BindView(R.id.input_password)    EditText _passwordText;
@BindView(R.id.btn_login)    Button _loginButton;
@BindView(R.id.link_signup) TextView _signupLink;

@Override
public void onDestroyView() {
    super.onDestroyView();

    // unbind the view to free some memory
    unbinder.unbind();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.Example, container, false);

    unbinder=ButterKnife.bind(this,rootView);



    _loginButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            login();
        }
    });


    _signupLink.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view)
        {
            Intent create= new Intent(getActivity(),NewAccount.class);
            startActivity(create);
        }

    });
    return rootView;
}

public void login() {
    Log.d(TAG, "Login");

    if (!validate()) {
        onLoginFailed();
        return;
    }

    _loginButton.setEnabled(false);

    final ProgressDialog progressDialog = new ProgressDialog(getActivity(),
            R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Authenticating...");
    progressDialog.show();
    //new YourAsynTask(getActivity()).execute();

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    // TODO: Implement your own authentication logic here.

   new android.os.Handler().postDelayed(
            new Runnable() {
                public void run() {
                    // On complete call either onLoginSuccess or onLoginFailed
                    onLoginSuccess();

                    // onLoginFailed();
                    progressDialog.dismiss();

                }
            }, 3000);
}

@Override
public void onPause() {
    Log.e("DEBUG", "OnPause of loginFragment1");
    super.onPause();
}

public void onLoginSuccess() {
    _loginButton.setEnabled(true);
    Intent i=new Intent(getActivity(),SuccessLogin.class);
    startActivity(i);
}

public void onLoginFailed() {
    Toast.makeText(getActivity(), "Login failed", Toast.LENGTH_LONG).show();

    _loginButton.setEnabled(true);
}

public boolean validate() {
    boolean valid = true;

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        _emailText.setError("enter a valid email address");
        valid = false;
    } else {
        _emailText.setError(null);
    }

    if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
        _passwordText.setError("between 4 and 10 alphanumeric characters");
        valid = false;
    } else {
        _passwordText.setError(null);
    }

    return valid;
}

Logcat output:

11-16 19:20:10.955 4022-4022/com.example.a1332931.login_application E/WindowManager: android.view.WindowLeaked: Activity com.example.a1332931.login_application.TabActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{42b6135 V.E...... R......D 0,0-683,232} that was originally added here
                                                                                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:375)
                                                                                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299)
                                                                                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                                                                                     at android.app.Dialog.show(Dialog.java:319)
                                                                                     at com.example.a1332931.login_application.Example.login(Example.java:156)
                                                                                     at com.example.a1332931.login_application.Example$1.onClick(Example.java:67)
                                                                                     at android.view.View.performClick(View.java:5201)
                                                                                     at android.view.View$PerformClick.run(View.java:21163)
                                                                                     at android.os.Handler.handleCallback(Handler.java:746)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                     at android.os.Looper.loop(Looper.java:148)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-16 19:20:10.957 4022-4095/com.example.a1332931.login_application E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb8aa6c60

11-16 19:20:12.512 4022-4022/com.example.a1332931.login_application E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: com.example.a1332931.login_application, PID: 4022
                                                                                  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference
                                                                                      at com.example.a1332931.login_application.Example.onLoginSuccess(Example.java:200)
                                                                                      at com.example.a1332931.login_application.Example$3.run(Example.java:168)
                                                                                      at android.os.Handler.handleCallback(Handler.java:746)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Nadeem Shaikh
  • 1,160
  • 9
  • 17
  • `_loginButton.setEnabled(false);` AND `java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setEnabled(boolean)' on a null object reference`. – greenapps Nov 16 '17 at 14:52

1 Answers1

1

Add this configuration change in your Android manifest activity:

<activity
            android:name="YourActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
diegoveloper
  • 93,875
  • 20
  • 236
  • 194