繁体   English   中英

反复单击按钮时出现错误。 我该如何解决?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM