[英]I get an error when clicking the buttons repeatedly. How can I fix it?
我有一个问答应用程序。 我接受了 arraylist 的问题。 但是当继续下一个问题时,我的应用程序出错了。 在我的应用程序中移动到下一个问题时,有一个 animation,在此 animation 期间,上一个问题的按钮在移动时再次单击时会出错。 我的猜测是,当再次点击时,他想检查上一个问题是真还是假,但是他找不到上一个问题,因为代码转到下一个问题。 但我找不到如何解决它。 我的错误附在下面
日志猫:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setBackgroundTintList(android.content.res.ColorStateList)' on a null object reference
at com.haktansoft.tytayt.islamidevir.checkAns(islamidevir.java:427)
at com.haktansoft.tytayt.islamidevir.access$000(islamidevir.java:41)
at com.haktansoft.tytayt.islamidevir$1.onClick(islamidevir.java:264)
这是我在 Logcat 中遇到的错误行
java:427 = correctOption.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#14E39A")));
java:41 = public class islamidevir extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
java:264 = checkAns((Button) v);
java 代码:
for (int i = 0; i < 4; i++) {
linearLayout1.getChildAt(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkAns((Button) v);
}
});
}
Random randomizer = new Random();
sira = (randomizer.nextInt(list.size()));
txtnumberIndicator.setText(position + 1 + "/" + list.size());
playAnim(txtQuestions, 0, list.get(sira).getQuestions());
Next_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Next_btn.setEnabled(false);
Next_btn.setAlpha(0.7f);
enableOptions(true);
position++;
sira = (randomizer.nextInt(list.size()));
}
});
navigationDrawer();
}
private void checkAns(Button selectedOptions) {
enableOptions(false);
Next_btn.setEnabled(true);
Next_btn.setAlpha(1);
if (selectedOptions.getText().toString().equals(list.get(sira).getCorrectAnswer())) {
//correct Answer
score++;
final MediaPlayer mp = MediaPlayer.create(this, R.raw.ding);
selectedOptions.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#14E39A")));
mp.start();
} else {
//wrong Answer
final MediaPlayer mp = MediaPlayer.create(this, R.raw.wrong_buzzer);
selectedOptions.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#FF2B55")));
Button correctOption = linearLayout1.findViewWithTag(list.get(sira).getCorrectAnswer());
correctOption.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#14E39A")));
mp.start();
}
}
问题是,当您多次单击时,您将移动到下一个上下文,因此成为上一个按钮的实际不再存在。
我认为您可以在您的方法 checkAns(p pParamater) 中添加一个验证,如下所示:
checkAns(P pParameter) {
if(pParameter.notNullOrEmpty() {
then ...
}
}
或者有一个 state: isMoving 并检查这个 state。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.