进度对话框打开且用户更改方向时,应用程序崩溃

时间:2017-11-16 14:04:31

标签: java android nullpointerexception

我的应用程序有一个用于登录过程的进度对话框,当对话框打开时更改方向时,应用程序崩溃。这一切都正常,除非在对话框启动时屏幕方向发生变化。此时应用程序崩溃了。我在过去3晚发现了这个问题,但是无法得到它,请帮忙。 我的片段:

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输出:

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)

1 个答案:

答案 0 :(得分:0)

在Android清单活动中添加此配置更改:

<activity
            android:name="YourActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"/>