내 onTick() 메서드에서 2 줄에 NullPointer 오류가 발생했습니다. 서브 클래스를 구현하고이 타이머를 작동시키는 방법에 익숙하지 않습니다. CountDownTimers를 봤는데 찾았던 예제를 구현하려 했으니 지저분해질 수 있습니다.퀴즈 게임에서 CountDownTimer, NullPointer - 안드로이드 (자바)
타이머를 구현하기 전에 앱이 훌륭하게 작동했습니다. 내가 원하는 것은이 활동이 시작되면 바로 타이머를 시작한 다음 타이머를 다시 시작하고 클릭이나 타이머가 만료 된 후에 새로운 질문을 표시하는 것입니다.
미리 감사드립니다.
public class QuestionView extends Activity {
int correctAnswers = 0;
int wrongAnswers = 0;
int answer = 0;
int i = 0;
long startTime = 50000;
long interval = 1000;
long timeElapsed;
boolean timerHasStarted = false;
Button answer1;
Button answer2;
Button answer3;
Button answer4;
TextView question;
TextView timer;
TextView timeElapsedView;
ArrayList<Question> queries;
Timer cdTimer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.questionviewmain);
answer1 = (Button)findViewById(R.id.answer1);
answer2 = (Button)findViewById(R.id.answer2);
answer3 = (Button)findViewById(R.id.answer3);
answer4 = (Button)findViewById(R.id.answer4);
question = (TextView)findViewById(R.id.question);
queries = getIntent().getParcelableArrayListExtra("queries");
cdTimer = new Timer(startTime, interval);
loadQuestion();
}
public void loadQuestion() {
if(i == 9) {
endQuiz();
} else {
if(!timerHasStarted) {
cdTimer.start();
timerHasStarted = true;
} else {
cdTimer.cancel();
timerHasStarted = false;
}
answer = queries.get(i).getCorrectAnswer();
question.setText(queries.get(i).getQuery());
answer1.setText(queries.get(i).getA1());
answer2.setText(queries.get(i).getA2());
answer3.setText(queries.get(i).getA3());
answer4.setText(queries.get(i).getA4());
answer1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(0);
if(answer == 0) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
answer2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(1);
if(answer == 1) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
answer3.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(2);
if(answer == 2) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
answer4.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(3);
if(answer == 3) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
}
}
public int getCorrectAnswers() { return correctAnswers; }
public int getWrongAnswers() { return wrongAnswers; }
public ArrayList<Question> getQueries() {
return queries;
}
public void nextQuestion() {
i++;
loadQuestion();
}
public class Timer extends CountDownTimer {
public Timer(long starttime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
timer.setText("Time's up!");
timeElapsedView.setText("Time Elapsed: " + String.valueOf(startTime));
}
@Override
public void onTick(long millisUntilFinished) {
timer.setText("Time remain: " + millisUntilFinished);
timeElapsed = startTime - millisUntilFinished;
timeElapsedView.setText("Time Elapsed: " + String.valueOf(timeElapsed));
}
}
public void endQuiz() {
Intent intent = new Intent(QuestionView.this, Results.class);
intent.putExtra("correctAnswers", correctAnswers);
intent.putExtra("wrongAnswers", wrongAnswers);
intent.putParcelableArrayListExtra("queries", queries);
startActivity(intent);
}
}
로그 캣
12-05 07:32:06.142: E/AndroidRuntime(6264): FATAL EXCEPTION: main
12-05 07:32:06.142: E/AndroidRuntime(6264): java.lang.NullPointerException
12-05 07:32:06.142: E/AndroidRuntime(6264): at com.example.test.QuestionView$Timer.onTick(QuestionView.java:164)
12-05 07:32:06.142: E/AndroidRuntime(6264): at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:124)
12-05 07:32:06.142: E/AndroidRuntime(6264): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 07:32:06.142: E/AndroidRuntime(6264): at android.os.Looper.loop(Looper.java:137)
12-05 07:32:06.142: E/AndroidRuntime(6264): at android.app.ActivityThread.main(ActivityThread.java:4745)
12-05 07:32:06.142: E/AndroidRuntime(6264): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 07:32:06.142: E/AndroidRuntime(6264): at java.lang.reflect.Method.invoke(Method.java:511)
12-05 07:32:06.142: E/AndroidRuntime(6264): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-05 07:32:06.142: E/AndroidRuntime(6264): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-05 07:32:06.142: E/AndroidRuntime(6264): at dalvik.system.NativeStart.main(Native Method)
게시하여 로그 캣 오류를 변경해야합니다. – Sam
"내 줄 2 개에 NullPointer 오류가 있습니다."어떤 줄에서 오류가 발생하는지 짐작할 수있는 간단한 게임의 일부입니까? –
오류가 onTick 메서드에 있고 NullPointer라고 말했지만 LogCat 출력으로 시작 게시물을 편집했습니다. – Matt