我正在为一个应用程序制作MCQ,现在我正在制作按钮,如果我的答案是对的,我必须看看!
我正在通过multiMap从相关问题中做出选择,我正在通过这样的inflater获取Checkbox:
for (String answer : multiMap.get(questionFromMultiMap))
{
CheckBox et_button = (CheckBox) getLayoutInflater().inflate(R.layout.numberofchoices, null);
container.addView(et_button);
et_button.setText(answer);
listOfChoice.add(answer);
}
当我试图检查其中一个是否检查并获取字符串时,logcat告诉我:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.CheckBox.isChecked()' on a null object reference
at lyceraymondpointcar.entinfo.Games.Symptom$1.onClick(Symptom.java:87)
以下是我检查是否检查的方法
btnCorrect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if ((et_button).isChecked()){
String choice = et_button.getText().toString();
System.out.println("pouet");
}else {
//getQuestionAndAnswerFromList();
System.out.println("pouet");
}
}
});
我不知道为什么我会收到此错误,如果有人可以向我解释。
对我来说,这是我的充气机的问题,因为我有3个或4个具有相同ID的复选框!那我该怎么办?
感谢您的帮助!
答案 0 :(得分:1)
您需要查看变量范围。您可能在2个地方宣布et_button
,并且您没有为您在此行访问的那个人提供价值:
if ((et_button).isChecked())
您需要从此行中删除Checkbox
,如下所示:
et_button = (CheckBox) getLayoutInflater().inflate(R.layout.numberofchoices, null);
因为这样您实际上是为您在下面访问的et_button
分配了价值。
我假设您在活动的其他位置声明了et_button
,因为编译器正在为您提供NPE,而不是未定义的变量et_button
' 强>
编辑: 此外,还有一对支架已经过时,因此请将它们拆下来:
if (et_button.isChecked())
答案 1 :(得分:0)
使用此:
View v = getLayoutInflater().inflate(R.layout.numberofchoices, null);
CheckBox et_button = (CheckBox) v.findViewById(R.id.YOUR_CHECKBOX_ID);
container.addView(et_button);
答案 2 :(得分:0)
CheckBox et_button = (CheckBox) v.findViewById(R.id.YOUR_CHECKBOX_ID);
是否正确? “YOUR_CHECKBOX_ID”是正确的吗?