1

私は10の質問を表示する雑学クイズゲームを持っていて、それぞれに10秒のタイマーがあります。正しく機能しない2つの問題があります。

まず、質問でタイマーが切れると、次の質問が表示されますが、タイマーはリセットされません。テキストビューは「Time'sup!」のままです。表示された新しい質問でタイマーを再起動する代わりに、「経過時間:10000」。

最後に、[結果]ページでは、正しいスコアがテキストビューに表示されません。パーセンテージのテキストビューは正しく表示されますが、スコアのテキストビューには「android.widget.TextView@416473c」またはその他のランダムなメモリ位置が表示されます。

プログラムがクラッシュすることはなく、機能が正しくないだけです。コード構造やその他の提案は大歓迎です!これは私の最初のAndroidモバイルアプリの試みであり、私はゆっくりと苦労しています。まだ楽しんでいます!:)

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

2 に答える 2

4

そのすべてのコードから、これは私が起こっていると思うことです

まず、質問でタイマーが切れると、次の質問が表示されますが、タイマーはリセットされません。テキストビューは「Time'sup!」のままです。表示された新しい質問でタイマーを再起動する代わりに、「経過時間:10000」。

これはtimerHasStarted、時間がなくなった後に変数をfalseに設定しなかったことが原因のようです。したがって、おそらく次の質問をロードするとき、または結果を表示した後に、変数をfalseに設定します。

最後に、[結果]ページでは、正しいスコアがテキストビューに表示されません。パーセンテージのテキストビューは正しく表示されますが、スコアのテキストビューには「android.widget.TextView@416473c」またはその他のランダムなメモリ位置が表示されます。

これは、q変数をtextviewに設定し、IDを取得しているためです。あなたは次のようなものが必要ですq1.getText().toString()

同じ名前スコアを持つ複数の変数があります。だからそれをに変更します

  TextView score2 = (TextView)findViewById(R.id.score);
  String s = "" + score;
  score2.setText(s);
于 2012-12-17T16:35:38.350 に答える
0

String s = "" + scorewherescoreは名前を付けたものでTextviewあり、明らかに整数ではなく、ユーザーのスコアと同等ではないため、スコアは期待したものではありません。:)

于 2013-02-23T15:50:03.053 に答える