Search code examples
androidandroid-alertdialogandroid-6.0-marshmallowfindviewbyidnumberpicker

Null Pointer Exception on Alert Dialog show, only on Android 6.0


I have a strange problem when I try to open Alert Dialog with Number Picker in it. It should be called after I press a button with listener set to that:

private class ButtonClickListener implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(ImagesActivity.this);
            AlertDialog dialog;
            final NumberPicker np = new NumberPicker(ImagesActivity.this);
            np.setMinValue(1);
            np.setMaxValue(dataModel.getPagesNumber());
            np.setValue(currentPage);
            builder.setView(np);
            builder.setTitle(R.string.jump_title);
            builder.setPositiveButton(R.string.jump_ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    pager.setCurrentItem(np.getValue() - 1);
                    dialog.dismiss();
                }
            });
            builder.setNegativeButton(R.string.jump_cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });

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

ImagesActivity is class, where ButtonClickListener is placed. It shows ViewPager, which should be scrolled into page selected using NumberPicker.

It works fine on my older phones, but when I try to launch it on Android 6 I get that message error:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.android.internal.app.AlertController.setupView(AlertController.java:489) at com.android.internal.app.AlertController.installContent(AlertController.java:234) at android.app.AlertDialog.onCreate(AlertDialog.java:423) at android.app.Dialog.dispatchOnCreate(Dialog.java:394) at android.app.Dialog.show(Dialog.java:295) at android.app.DialogFragment.onStart(DialogFragment.java:490) at android.app.Fragment.performStart(Fragment.java:2244) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) at android.app.BackStackRecord.run(BackStackRecord.java:793) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Do you know what can it be caused by? And how can I fix it up?


Solution

  • I managed to resolve this problem.

    I had to change

    import android.app.alertdialog;
    

    to

    import android.support.v7.app.alertdialog;
    

    Probably there was some type of change since Marshmallow version, which causes problem when we're not carefull enough about using standard/support versions of libraries.