我的问题是双重桶装,我正在使用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();
}
}
答案 0 :(得分:0)
您正在从showQuestion()方法中清除questionView textview。这就是为什么不显示问题的原因。
由于问题未在其中显示,并且每当您尝试选择答案时,它只会放置一个nullPointerException
,因为与答案相关的问题根本不存在。
答案 1 :(得分:0)
您永远不会调用方法showQuestion()
(除非从按钮开始),因此创建活动时索引currentQuestion
仍为-1。
因此,当您检查答案时,您正试图访问导致ArrayIndexOutOfBoundsException的answers[-1]
。您应该在showQuestion()
的末尾调用main()
来显示第一个问题,并将currentQuestion
递增到数组的边界。
PS:您应该删除questionView.setText("");
中的showQuestion()
以显示文字。