2012-12-17 5 views
1

10 가지 질문을 표시하는 퀴즈 게임이 있으며 각각 10 초 타이머가 있습니다. 나는 올바르게 작동하지 않는 2 가지 문제가있다.CountDownTimer 퀴즈 게임 점수 - Android (java)

첫째, 질문이 만료되면 다음 질문이 표시되지만 타이머는 재설정되지 않습니다. textviews는 "Time 's up!"에 머물러 있습니다. 및 "경과 된 시간 : 10000"대신 표시되는 새 질문에 타이머를 다시 시작하십시오.

마지막으로 결과 페이지에서 올바른 점수가 텍스트보기에 표시되지 않습니다. 백분율 textview는 올바르게 표시되지만 점수 textview는 "[email protected]"또는 기타 임의의 메모리 위치를 표시합니다.

프로그램이 잘못 작동하는 일은 없습니다. 모든 코드 구조 또는 기타 제안 사항을 높이 평가합니다! 이것은 내 첫 안드로이드 모바일 앱 시도이며 천천히 고군분투하고 있습니다. 그러나 그것을 즐기는 것! :)

QuesteionView.java

public class QuestionView extends Activity { 

    @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"); 
     timer = (TextView)findViewById(R.id.timer); 
     timeElapsedView = (TextView)findViewById(R.id.timeElapsedView); 
     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(); 
        } 
       } 
      }); 

      //same type of code for buttons for answers 2 through 4. 
       } 
    } 

    public void nextQuestion() { 
     score = score + timeElapsed; 
     i++; 
     loadQuestion(); 
    } 

    public class Timer extends CountDownTimer {  
     public Timer(long startTime, long interval) { 
      super(startTime, interval); 
     } 

     public void onFinish() { 
      if(i == 9) { 
       cdTimer.cancel(); 
      } else { 
       timer.setText("Time's up!"); 
       timeElapsedView.setText("Time Elapsed: " + String.valueOf(startTime)); 
       wrongAnswers++; 
       nextQuestion(); 
      } 
     } 

     public void onTick(long millisUntilFinished) { 
      timer.setText("Time remain: " + Long.toString(millisUntilFinished)); 
      timeElapsed = startTime - millisUntilFinished; 
      timeElapsedView.setText("Time Elapsed: " + Long.toString(timeElapsed)); 
     } 
    } 

    public void endQuiz() { 
     Intent intent = new Intent(QuestionView.this, Results.class); 
     intent.putExtra("correctAnswers", correctAnswers); 
     intent.putExtra("wrongAnswers", wrongAnswers); 
     intent.putExtra("score", score); 
     intent.putParcelableArrayListExtra("queries", queries); 
     startActivity(intent); 
    } 
} 

Results.java 그 모든 코드에서

public class Results extends Activity { 

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

    int cAnswers; 
    int wAnswers; 

    long score; 

    ArrayList<Question> qs; 

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

     cAnswers = getIntent().getIntExtra("correctAnswers", -1); 
     wAnswers = getIntent().getIntExtra("wrongAnswers", -1); 
     score = getIntent().getLongExtra("score", -1); 

     qs = getIntent().getParcelableArrayListExtra("queries"); 

     Button mainmenuBtn = (Button)findViewById(R.id.mainmenuBtn); 
     mainmenuBtn.setText("Main Menu"); 

     mainmenuBtn.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       restart(); 
      } 
     }); 

     showResults(); 
    } 

    public void showResults() { 

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

     TextView header = (TextView)findViewById(R.id.header); 
     header.setText("SUMMARY"); 

     TextView percentage = (TextView)findViewById(R.id.percentage); 
     percentage.setText(Integer.toString(10 * cAnswers) + "%"); 

     TextView score = (TextView)findViewById(R.id.score); 
     String s = "" + score; 
     score.setText(s); 

     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); 

     for(int i = 0; i < tList.size(); i++) { 
      tList.get(i).setText(qs.get(i).getQuery()); 
      if(qs.get(i).getSelectedAnswer() == qs.get(i).getCorrectAnswer()) { 
       tList.get(i).setTextColor(Color.GREEN); 
      } else { 
       tList.get(i).setTextColor(Color.RED); 
      } 
     } 
    } 

    public void restart() { 
     Intent intent = new Intent(Results.this, MainMenu.class); 
     startActivity(intent); 
    } 
} 
+6

엄청난 양의 코드를 게시했지만 문제를 해결하려고 시도한 내용이 표시되지 않았습니다. 또한 제목은 예외를 의미하지만 질문 본문에는 언급이 없습니다. –

+1

'ArrayList 'tList = new ArrayList (9);'ArrayList 대신 tList = new ArrayList (10); ' –

+0

이 작동하고 있다는 것을 알고있는 코드를 잘라내십시오. – Theolodis

답변

4

, 이것은 내가 첫째

일어나는 경우 생각 무엇 타이머 질문이 만료되면 다음 질문을 표시하지만 타이머가 재설정되지 않습니다. textviews는 "Time 's up!"에 머물러 있습니다. 및 "경과 된 시간 : 10000"대신 표시되는 새 질문에 타이머를 다시 시작하십시오.

이 시간은 당신이 결과를 표시 한 후 그래서 당신은 당신의 다음 질문을로드 아마 때 false로 그 설정하거나 것 다 떨어진 false로 당신의 timerHasStarted 변수를 설정하지에 의한 것으로 보인다.

마지막으로 결과 페이지에서 올바른 점수가 텍스트보기에 표시되지 않습니다. 백분율 textview는 올바르게 표시되지만 점수 textview는 "[email protected]"또는 기타 임의의 메모리 위치를 표시합니다.

q 변수를 textview로 설정하고 ID를 가져 오기 때문입니다. q1.getText().toString()

동일한 이름 점수를 가진 변수가 여러 개 있습니다. 그래서 점수가 score 당신이 Textview 분명하지 정수 사용자가 가지고있는 점수에 해당하지의 이름을 딴 것입니다 당신이 String s = "" + score를 할당하기 때문에 당신이 무엇을 기대하지 표시

TextView score2 = (TextView)findViewById(R.id.score); 
    String s = "" + score; 
    score2.setText(s); 
+0

모든 q 변수 (q1에서 q10까지)가 올바른 출력을 표시합니다. 작동하지 않는 유일한 TextView는 "점수"텍스트 뷰입니다. 전체 결과 클래스를 포함하도록 초기 게시물을 편집했습니다. – Matt

+0

또한 timerHasStarted 변수를 수정하면 다른 문제가 해결되었습니다. 고맙습니다! – Matt

+0

나는 그것을 이해했다. 다시 감사합니다. – Matt