安卓源代码中的AlertDialog NullPointerException



用户报告在我的AlertDialog:的onClick行发生NullPointerException

new AlertDialog.Builder(this)
        .setTitle(getString(R.string.dialog_error))
        .setMessage(getString(R.string.create_failed_error))
        .setCancelable(false)
        .setPositiveButton(getString(R.string.dialog_got_it), new DialogInterface.OnClickListener() { 
            @Override
            public void onClick(DialogInterface dialog, int which) {  // #L286
                dialog.cancel();
                mButton.render();
            }
        })
        .create().show();

因此,错误根源于160行的android.internal.app.AlertController

((DialogInterface.OnClickListener) msg.obj).onClick(mDialog.get(), msg.what);

根据我的猜测,mDialog在这里是空的,但这怎么可能发生呢?从实现中,我们了解到对话框存储在一个弱引用中:

private WeakReference<DialogInterface> mDialog;

在用户按下肯定对话框按钮之前,对话框是否可能被垃圾收集?我发现这个非常令人困惑

StackTrace:

java.lang.NullPointerException
at com.myapp.android.NewActivity$5.onClick(NewActivity.java:286)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)

按钮在onCreate 中实例化

mButton = new CustomButton((CustomButton) findViewById(R.id.goButton));

如果不是复制/粘贴问题,您的问题一定在这里:

     mButton = new CustomButton((CustomButton) findViewById(R.id.goButton));

这是一个错误的编码,也不一定是:

     mButton = new CustomButton(this);

这代表上下文,或者可能没有参数。或者它必须是这样的:

    mButton = (CustomButton)findViewById(R.id.goButton);

不知道这是否是唯一的问题,但我必须展示代码,不好作为注释。

相关内容

  • 没有找到相关文章

最新更新