Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
小游戏在测验结束后没有显示正确的结果-文本视图和按钮问题-Java(android)_Java_Android_Button_Textview - Fatal编程技术网

小游戏在测验结束后没有显示正确的结果-文本视图和按钮问题-Java(android)

小游戏在测验结束后没有显示正确的结果-文本视图和按钮问题-Java(android),java,android,button,textview,Java,Android,Button,Textview,Results.java类中showResults()方法的输出工作不正常。该琐事游戏循环了所有10个问题,并显示供用户选择答案。在第10个问题之后,将显示一个结果页面,显示正确答案和错误答案的结果。正确的问题将显示为绿色,错误的问题将显示为红色。问题的颜色没有以正确的颜色显示。此外,变量“correctAnswers”和“ErrorAnswers”在QuestionView类中不会递增。这可以通过Results.java中showResults()的输出看到 我已经在很多地方调试过了,但似乎找

Results.java类中showResults()方法的输出工作不正常。该琐事游戏循环了所有10个问题,并显示供用户选择答案。在第10个问题之后,将显示一个结果页面,显示正确答案和错误答案的结果。正确的问题将显示为绿色,错误的问题将显示为红色。问题的颜色没有以正确的颜色显示。此外,变量“correctAnswers”和“ErrorAnswers”在QuestionView类中不会递增。这可以通过Results.java中showResults()的输出看到

我已经在很多地方调试过了,但似乎找不到我把事情搞砸的地方

在此问题上的帮助和代码结构的建议是感激的!提前谢谢你

Results.java

public class Results extends Activity {

    QuestionView qv = new QuestionView();
    ArrayList<Question> queryList = qv.getQueries();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.resultsmain);

        Button homeBtn = (Button)findViewById(R.id.homeBtn);
        Button highscoresBtn = (Button)findViewById(R.id.highscoresBtn);

        homeBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                Intent intent1 = new Intent(Results.this, MainMenu.class);
                startActivity(intent1);
            }
        });

        highscoresBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                Intent intent2 = new Intent(Results.this, Highscores.class);
                startActivity(intent2);
            }
        });

        showResults();
    }

    public void showResults() {

        ArrayList<TextView> tList = new ArrayList<TextView>(10);

        TextView header = (TextView)findViewById(R.id.header);
        TextView q1 = (TextView)findViewById(R.id.q1);
        TextView q2 = (TextView)findViewById(R.id.q2);
        TextView q3 = (TextView)findViewById(R.id.q3);
        TextView q4 = (TextView)findViewById(R.id.q4);
        TextView q5 = (TextView)findViewById(R.id.q5);
        TextView q6 = (TextView)findViewById(R.id.q6);
        TextView q7 = (TextView)findViewById(R.id.q7);
        TextView q8 = (TextView)findViewById(R.id.q8);
        TextView q9 = (TextView)findViewById(R.id.q9);
        TextView q10 = (TextView)findViewById(R.id.q10);

        tList.add(q1);
        tList.add(q2);
        tList.add(q3);
        tList.add(q4);
        tList.add(q5);
        tList.add(q6);
        tList.add(q7);
        tList.add(q8);
        tList.add(q9);
        tList.add(q10);

        tList.get(0).setText(queryList.get(0).getQuery());

        if(queryList.get(0).getCorrectness() == true) {
            tList.get(1).setText("Changed to true");
        } else {
            tList.get(1).setText("DID NOT Change to true");
        }

        tList.get(2).setText(Integer.toString(qv.getCorrectAnswers()));
        tList.get(3).setText(Integer.toString(qv.getWrongAnswers()));

/*      for(int i = 0; i < 10; i++) {
            tList.get(i).setText(queryList.get(i).getQuery());
            if(queryList.get(i).getCorrectness() == true) {
                tList.get(i).setTextColor(Color.GREEN);
            } else {
                tList.get(i).setTextColor(Color.RED);
            }
        }*/
    }
}
变量“correctAnswers”和“ErrorAnswers”在QuestionView类中不递增。这可以通过Results.java中showResults()的输出看到

一旦你把一个活动放在后台,就不能保证它不会在没有警告的情况下被销毁。您需要通过您意图中的答案计数:

public void endQuiz() {
    Intent intent = new Intent(QuestionView.this, Results.class);
    intent.putExtras("correct", correctAnswers);
    intent.putExtras("wrong", wrongAnswers);
    intent.putExtras("queries", queries); // You will need to make Question implement Parcelable 
    startActivity(intent);
}
然后在结果活动中读取这些值。否则,您将面临丢失此信息并获得默认值3的风险。(简而言之,
correctAnswers++
没有任何问题)


此外,您还有许多非常相似/重复的代码。例如,您可以对答案使用一个OnClickListener,只需做一些小改动:

OnClickListener answerClick = new OnClickListener() {
    public void onClick(View v) {
        int index = (Integer) v.getTag();
        if(answer == index) {
            correctAnswers++;
            queries.get(i).setSelectedAnswer(index);
            queries.get(i).setCorrectness(true);
        } else {
            wrongAnswers++;
            queries.get(i).setCorrectness(false);
        }
        nextQuestion();
    }
};

answer1 = (Button)findViewById(R.id.answer1);
answer1.setOnClickListener(answerClick);
answer1.setTag(0);

answer2 = (Button)findViewById(R.id.answer2);
answer2.setOnClickListener(answerClick);
answer2.setTag(1);

//etc

为什么correctAnswers和ErrorAnswers初始化为3?为什么setColor部分被注释掉?为什么要将正确性作为构造函数参数传递?您应该将问题初始化为未回答,而不是使用已设置的正确性值。您应该使用布尔值,而不是布尔值,将null映射为未应答,将非null值映射为实际正确性。。。您知道getRandom10可以多次返回相同的问题吗?接下来,您在活动(问题视图)上调用新操作员不好。。。似乎你不了解oop编程的基础知识(不要提及android编程),所以最好读一些书……他正在结果活动中创建一个QuestionView活动实例,用于从QuestionView活动访问方法是的,这就是我们使用Intents的原因。
public class Question {
    String a1;
    String a2;
    String a3;
    String a4;
    int correctAnswer;
    String query;
    int selectedAnswer;
    boolean correctness;

    public Question() {
    }

    public Question(String a1, String a2, String a3, String a4, int correctAnswer, String query, int selectedAnswer, boolean correctness) {
        this.a1 = a1;
        this.a2 = a2;
        this.a3 = a3;
        this.a4 = a4;
        this.correctAnswer = correctAnswer;
        this.query = query;
        this.selectedAnswer = selectedAnswer;
        this.correctness = correctness;
    }

    public String getA1() { return a1; }
    public String getA2() { return a2; }
    public String getA3() { return a3; }
    public String getA4() { return a4; }
    public String getQuery() { return query; }
    public int getCorrectAnswer() { return correctAnswer; }
    public boolean getCorrectness() { return correctness; }

    public void setSelectedAnswer(int newAnswer) {
        selectedAnswer = newAnswer;
    }

    public void setCorrectness(boolean newAnswer) {
        correctness = newAnswer;
    }
}
public void endQuiz() {
    Intent intent = new Intent(QuestionView.this, Results.class);
    intent.putExtras("correct", correctAnswers);
    intent.putExtras("wrong", wrongAnswers);
    intent.putExtras("queries", queries); // You will need to make Question implement Parcelable 
    startActivity(intent);
}
OnClickListener answerClick = new OnClickListener() {
    public void onClick(View v) {
        int index = (Integer) v.getTag();
        if(answer == index) {
            correctAnswers++;
            queries.get(i).setSelectedAnswer(index);
            queries.get(i).setCorrectness(true);
        } else {
            wrongAnswers++;
            queries.get(i).setCorrectness(false);
        }
        nextQuestion();
    }
};

answer1 = (Button)findViewById(R.id.answer1);
answer1.setOnClickListener(answerClick);
answer1.setTag(0);

answer2 = (Button)findViewById(R.id.answer2);
answer2.setOnClickListener(answerClick);
answer2.setTag(1);

//etc