为什么我的Android测验应用程序在提交答案时会崩溃?不打印问题?

时间:2016-12-05 12:12:00

标签: java android android-studio

我的问题是双重桶装,我正在使用android studio开发一个简单的测验应用程序。对我来说代码似乎很好,并且在编译应用程序时没有显示错误消息。但是,当我运行应用程序时,问题(字符串)不会显示在用户界面中,当我点击提交答案按钮时,应用程序就会崩溃。下面是我正在实现的代码示例。任何帮助或建议将不胜感激。谢谢

package com.example.shaun.quiz;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    public int currentQuestion;
    public String[] questions;
    public String[] answers;

    Button answerButton;
    Button questionButton;
    public TextView questionView;
    public TextView answerView;
    public EditText answerText;

    public void main() {
        questions = new String[]{"1+2= ?", "1+1= ?",};     /*Array of Hard Coded Questions*/
        answers = new String[]{"3", "2",};                 /*Array of Hard Coded Answers to indexed to match the questions*/
        currentQuestion = -1;                              /*This will index the questions to be used*/
        answerButton = (Button) findViewById(R.id.AnswerButton);
        questionButton = (Button) findViewById(R.id.QuestionButton);
        questionView = (TextView) findViewById(R.id.QuestionTextView);
        answerView = (TextView) findViewById(R.id.AnswerTextView);
        answerText = (EditText) findViewById(R.id.AnswerText);

        answerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAnswer();
            }
        });

        questionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showQuestion();
            }
        });
    }

    public void showQuestion() {
        currentQuestion++;
        if (currentQuestion == questions.length)
            currentQuestion = 0;
        questionView.setText(questions[currentQuestion]);
        questionView.setText("");
        answerText.setText("");
    }

    public boolean isCorrect(String answer)
    {
        return (answer.equalsIgnoreCase(answers[currentQuestion]));
    }


    public void checkAnswer()

    {
        String answer = answerText.getText().toString();
        if(isCorrect(answer))
            answerView.setText("Correct!");                                               /*answerView, text view set to print the string in the event of the correct answer*/
        else
            answerView.setText("Sorry, the Correct answer is "+answers[currentQuestion]); /*answers[currentQuestion] answers reads the answer to the current question in use */
    }

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

2 个答案:

答案 0 :(得分:0)

您正在从showQuestion()方法中清除questionView textview。这就是为什么不显示问题的原因。

由于问题未在其中显示,并且每当您尝试选择答案时,它只会放置一个nullPointerException,因为与答案相关的问题根本不存在。

答案 1 :(得分:0)

您永远不会调用方法showQuestion()(除非从按钮开始),因此创建活动时索引currentQuestion仍为-1。

因此,当您检查答案时,您正试图访问导致ArrayIndexOutOfBoundsExceptionanswers[-1]。您应该在showQuestion()的末尾调用main()来显示第一个问题,并将currentQuestion递增到数组的边界。

PS:您应该删除questionView.setText("");中的showQuestion()以显示文字。