【问题标题】:Android: Unusual NullPointerException When Working With Array of CheckBoxAndroid:使用 CheckBox 数组时出现异常 NullPointerException
【发布时间】:2014-09-05 08:24:12
【问题描述】:

以下代码出现在 DialogFragment 内的 OnClickListener 中,当按下某个按钮时会引发空指针异常。我在另一个应用程序的 Activity 中设置了类似的代码,并且它可以完美运行数月。我被引导相信这可能与代码位于 DialogFragment 中的事实有关......?无论如何,是时候偷看一下了:

@Override
        public void onClick(View v) {
            CheckBox[] ch= new CheckBox[3];
            int ids[]= new int[3];
            ch[0] = (CheckBox)v.findViewById(R.id.checkbox1);
            ch[1] = (CheckBox)v.findViewById(R.id.checkbox2);
            ch[2] = (CheckBox)v.findViewById(R.id.checkbox3);
            for(int i=0;i<=2;i++){
                if(ch[i].isChecked()){    //this is the line 35 mentioned in the LogCat
                    ids[i]=1;
                }
            }
            ((blahblahblah)getActivity()).updater(ids);
            dismiss();
        }

我的 LogCat 如下:

java.lang.NullPointerException
        at com.blah.blah.addrule$1.onClick(addrule.java:35)
        at android.view.View.performClick(View.java:4445)
        at android.view.View$PerformClick.run(View.java:18446)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5140)
        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:795)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
        at dalvik.system.NativeStart.main(Native Method

【问题讨论】:

  • 显示addrule的代码
  • 交叉检查您的 findViewByid 引用是否引用了正确的复选框 ID?
  • @suitianshi 无意冒犯,但除非你让我知道你的怀疑,否则我将无法做到这一点。我不被允许。
  • @AndroidStudentM 引用就好了。
  • 试试这个。在 onclick 之外创建三个本地 checkBoxes 变量在 onCreate 或 OncreateView 方法中找到您的复选框 id,并在 onclick 方法中分配该 checkBoxes 引用,而不是在 onclick 中调用 findViewById。

标签: java android arrays checkbox


【解决方案1】:

您在被点击的视图v 上调用findViewById()。它没有作为子项的复选框,并且将返回 null,并且在 null 上调用方法会导致 NPE。

在实际包含复选框的视图层次结构上调用 findViewById()。在片段中可能是getView()

【讨论】:

  • 像魅力一样工作。如果可以的话,我会通过互联网给你寄一只免费的猫。谢谢 X1000000!
【解决方案2】:

您可以使用getView() 获取findViewById(),但不能使用v 喜欢:

ch[0] = (CheckBox) getView().findViewById(R.id.checkbox1);
ch[1] = (CheckBox) getView().findViewById(R.id.checkbox2);
ch[2] = (CheckBox) getView().findViewById(R.id.checkbox3);

【讨论】:

  • v 是我的 onCreateView() 返回的视图。我以前使用 v 在按钮上设置 OnClickListener。我没有使用 v ,就好像它是特定于 Android 的,哈哈。我无法发布所有代码,很明显这个问题已由 user:laalto 一小时前解决。感谢您的反对票..
  • @FatFeralChubbyTabby 但不清楚所以我添加了代码以便更好地理解。
猜你喜欢
  • 2016-11-11
  • 2016-04-07
  • 2011-12-03
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多