【问题标题】:Null Pointer Exception on Alert Dialog show, only on Android 6.0警报对话框显示空指针异常,仅在 Android 6.0 上
【发布时间】:2016-07-07 05:45:13
【问题描述】:

当我尝试打开带有Number PickerAlert Dialog 时,我遇到了一个奇怪的问题。它应该在我按下 button 并将 listener 设置为之后调用:

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 是类,ButtonClickListener 所在的位置。它显示ViewPager,应滚动到使用NumberPicker 选择的页面。

它在我的旧手机上运行良好,但是当我尝试在Android 6 上启动它时,我收到了这条消息错误

java.lang.NullPointerException:尝试调用虚拟方法 'android.view.View android.view.View.findViewById(int)' 为空 对象引用 在 com.android.internal.app.AlertController.setupView(AlertController.java:489) 在 com.android.internal.app.AlertController.installContent(AlertController.java:234) 在 android.app.AlertDialog.onCreate(AlertDialog.java:423) 在 android.app.Dialog.dispatchOnCreate(Dialog.java:394) 在 android.app.Dialog.show(Dialog.java:295) 在 android.app.DialogFragment.onStart(DialogFragment.java:490) 在 android.app.Fragment.performStart(Fragment.java:2244) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 在 android.app.BackStackRecord.run(BackStackRecord.java:793) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:482) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

你知道它是由什么引起的吗?我该如何解决?

【问题讨论】:

  • 我没有 setupView() 代码,我认为它是由 Android Library 提供的

标签: android android-alertdialog android-6.0-marshmallow findviewbyid numberpicker


【解决方案1】:

尝试在 LinearLayout 或 RelativeLayout 中添加 NumberPicker,然后将对话框视图设置为该 LinearLayout 或 RelativeLayout。

编辑: 您可以尝试将 NumberPicker 放在布局 xml 中并对其进行膨胀,然后在 setView 方法调用中使用它

【讨论】:

  • 不幸的是,它没有帮助。我仍然收到错误消息。
  • 如果注释掉builder.setView(np);你还有错误吗?
  • 请检查我的编辑,看看它是否解决了您的问题。
  • 不,它也没有帮助。我也收到了 builder.setView(np); 的错误。行评论
【解决方案2】:

我设法解决了这个问题。

我必须改变

import android.app.alertdialog;

import android.support.v7.app.alertdialog;

可能自 Marshmallow 版本以来发生了某种类型的更改,当我们在使用标准/支持版本的库时不够小心时会导致问题。

【讨论】:

    【解决方案3】:

    这意味着你搞砸了 alertDialogStyle - 它从那里读取布局资源 ID,如果它没有加载正确的布局,它将 NPE。

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 1970-01-01
      • 2011-01-08
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2021-03-08
      相关资源
      最近更新 更多