我正在android studio上创建测验应用程序。我需要在用户提交分数时显示吐司。我想在submitOnClick方法内调用我的calculateScore方法,但是calculateScore方法使应用程序崩溃。
如果我在提交内调用calculateScore,则该应用程序将崩溃,如果我将其称为onClick,则该应用程序将崩溃。
我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = findViewById(R.id.submit);
button.setOnClicklistener(submitOnClick);
}
final View.OnClicklistener submitOnClick = new View.OnClicklistener() {
@Override
public void onClick(View v) {
calculateScore();
Toast.makeText(Mainactivity.this,"Your score is " + score,Toast.LENGTH_LONG).show();
}
};
public void checkQuestion1(View view) {
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch (view.getId()) {
case R.id.right:
if (checked)
score += 1;
break;
case R.id.wrong:
if (checked)
score += 0;
break;
}
}
public void checkQuestion2(View view) {
CheckBox function = findViewById(R.id.checkbox_function);
CheckBox undefined = findViewById(R.id.checkbox_undefined);
CheckBox booleans = findViewById(R.id.checkbox_booleans);
boolean isCheckedFunction = function.isChecked();
boolean isCheckedUndefined = undefined.isChecked();
boolean isCheckedBooleans = booleans.isChecked();
if (isCheckedUndefined && isCheckedBooleans && !isCheckedFunction) {
score += 1;
} else {
score += 0;
}
}
public void checkQuestion3(View view) {
EditText userInput = findViewById(R.id.inputAnswer);
String name = userInput.getText().toString();
if (name.trim().equalsIgnoreCase("Class")) {
score += 1;
} else {
score += 0;
}
}
public void checkQuestion4(View view) {
boolean checked = ((RadioButton) view).isChecked();
switch (view.getId()) {
case R.id.correct:
if (checked)
score += 1;
break;
case R.id.incorrect:
if (checked)
score += 0;
break;
}
}
public void checkQuestion5(View view) {
CheckBox correctOne = findViewById(R.id.checkbox_correct_one);
CheckBox correctTwo = findViewById(R.id.checkbox_correct_two);
CheckBox incorrectOne = findViewById(R.id.checkbox_incorrect_one);
CheckBox incorrectTwo = findViewById(R.id.checkbox_incorrect_two);
boolean isCheckedCorrectOne = correctOne.isChecked();
boolean isCheckedCorrectTwo = correctTwo.isChecked();
boolean isCheckedIncorrectOne = incorrectOne.isChecked();
boolean isCheckedIncorrectTwo = incorrectTwo.isChecked();
if (isCheckedCorrectOne && isCheckedCorrectTwo && !isCheckedIncorrectOne & !isCheckedIncorrectTwo) {
score += 1;
} else {
score += 0 ;
}
}
public void calculateScore(){
checkQuestion2(null);
checkQuestion1(null );
checkQuestion3(null);
checkQuestion4(null);
checkQuestion5(null);
}
logcat: ---------崩溃开始
2019-11-04 10:09:57.514 11886-11886 / com.example.android.quizzapp E / AndroidRuntime:致命异常:main 流程:com.example.android.quizzapp,PID:11886 java.lang.NullPointerException:尝试在null对象上调用虚拟方法'boolean android.widget.CompoundButton.isChecked()' 参考 在com.example.android.quizzapp.Mainactivity.checkQuestion1(Mainactivity.java:39) 在com.example.android.quizzapp.Mainactivity.calculateScore(Mainactivity.java:122) 在com.example.android.quizzapp.Mainactivity $ 1.onClick(Mainactivity.java:32) 在android.view.View.performClick(View.java:5610) 在android.view.View $ PerformClick.run(View.java:22265) 在android.os.Handler.handleCallback(Handler.java:751) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:154) 在android.app.activityThread.main(activityThread.java:6077) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)