Click here to Skip to main content
15,301,401 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hello,
I have made a quiz application which include 5 questions. I have made a ResultActivity page which displays result of the quiz.
I have added a countDown timer of 20 sec for each question. When the Countdown timer finishes it moves to the next question automatically. When the questions are finished it should move to the ResultActivity page to display result.

I have only one issue...
Afetr reaching my last Question..if i does not select any answer and timer is finished the applicaton is not moving to my ResultActivity page..The timer is getting started again and again on the same question until i select any option

Here is my code:

QuizActivity.java
Java
package com.example.triviality;
import java.util.LinkedHashMap;
import java.util.List;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class QuizActivity extends Activity {
	List<question> quesList;
	public static int score, correct, wrong, wronganswers;
	public boolean isCorrect;
	static int qid = 0;
	int totalCount = 5;
	Question currentQ;
	TextView txtQuestion;
	RadioGroup radioGroup1;
	RadioButton rda, rdb, rdc;
	Button butNext;
	TextView rt;
	boolean nextFlag = false;
	boolean isTimerFinished = false;
	static LinkedHashMap lhm = new LinkedHashMap();
	MyCountDownTimer countDownTimer = new MyCountDownTimer(10000 /* 20 Sec */,
			1000);
	// final MyCountDownTimer timer = new MyCountDownTimer(20000,1000);
	public static String[] Correctanswers = new String[5];

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_quiz);
		DbHelper db = new DbHelper(this);
		quesList = db.getAllQuestions();
		currentQ = quesList.get(qid);
		txtQuestion = (TextView) findViewById(R.id.textView1);
		rda = (RadioButton) findViewById(R.id.radio0);
		rdb = (RadioButton) findViewById(R.id.radio1);
		rdc = (RadioButton) findViewById(R.id.radio2);
		butNext = (Button) findViewById(R.id.button1);
		// radioGroup1=(RadioGroup)findViewById(R.id.radioGroup1);
		setQuestionView();
		// timer.start();
		rt = (TextView) findViewById(R.id.rt);
		rt.setText("20");
		countDownTimer.start();
		butNext.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				countDownTimer.cancel();
				if (getNextQuestion(false)) {
					// Start The timer again
					countDownTimer.start();
				}
			}
		});
	}
	private void setQuestionView() {
		txtQuestion.setText(currentQ.getQUESTION());
		rda.setText(currentQ.getOPTA());
		rdb.setText(currentQ.getOPTB());
		rdc.setText(currentQ.getOPTC());
	}

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

		public void onFinish() {
			Log.e("Times up", "Times up");
			countDownTimer.cancel();
			if (getNextQuestion(false)) {
				// Start The timer again
				countDownTimer.start();
			}
		}
		@Override
		public void onTick(long millisUntilFinished) {
			rt.setText((millisUntilFinished / 1000) + "");
			Log.e("Second Gone", "Another Second Gone");
			Log.e("Time Remaining", "seconds remaining: " + millisUntilFinished
					/ 1000);
		}
	}
	boolean getNextQuestion(boolean c) {
		nextFlag = true;
		RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup1);
		// grp.clearCheck();
		RadioButton answer = (RadioButton) findViewById(grp
				.getCheckedRadioButtonId());
		if (rda.isChecked() || rdb.isChecked() || rdc.isChecked()) {
			qid++;
			Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
			grp.clearCheck();
			// wronganswers=
			if (!c && currentQ.getANSWER().equals(answer.getText())) {
				correct++;
			} else {
				lhm.put(currentQ.getQUESTION(), currentQ.getANSWER());
				wrong++;
			}

			if (qid < 5) {
				currentQ = quesList.get(qid);
				setQuestionView();

			} else {

				score = correct;
				Intent intent = new Intent(QuizActivity.this,
						ResultActivity.class);
				Bundle b = new Bundle();
				b.putInt("score", score); // Your score
				intent.putExtras(b); // Put your score to your next Intent
				startActivity(intent);
				return false;
			}
		} else {
			lhm.put(currentQ.getQUESTION(), currentQ.getANSWER());
			qid++;
			
			if (qid < 5) {	
				currentQ = quesList.get(qid);
				//currentQ.getANSWER().equals(wrong);
				wrong++;
				Log.e("yourans", currentQ.getANSWER());
				setQuestionView();
				
			}
			// wrong++;
			// Log.e("Without Any Selection ", "without  "+wrong);
			// Toast.makeText(getApplicationContext(),
			// "Please select atleast one Option",Toast.LENGTH_SHORT).show();

		}

		return true;
	}
}

ResultActivity.java:
Java
package com.example.triviality;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class ResultActivity extends Activity {
	Button restart;
	Button check;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_result);
	
		TextView t=(TextView)findViewById(R.id.textResult);
		TextView t1=(TextView)findViewById(R.id.textResult1);
		TextView t2=(TextView)findViewById(R.id.textResult2);
		restart=(Button)findViewById(R.id.restart);
		check=(Button)findViewById(R.id.check);
		
		StringBuffer sb=new StringBuffer();
		sb.append("Correct ans: "+QuizActivity.correct+"\n");
		StringBuffer sc=new StringBuffer();
		sc.append("Wrong ans : "+QuizActivity.wrong+"\n");
		StringBuffer sd=new StringBuffer();
		sd.append("Final Score : "+QuizActivity.score);
		t.setText(sb);
		t1.setText(sc);
		t2.setText(sd);
		QuizActivity.correct=0;
		QuizActivity.wrong=0;
		
		
		check.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				// TODO Auto-generated method stub
				Intent in=new Intent(getApplicationContext(),CheckActivity.class);
				startActivity(in);	
			}
		});
	
restart.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//QuizActivity quiz=new QuizActivity();
				
				// TODO Auto-generated method stub
				Intent intent=new Intent(getApplicationContext(),QuizActivity.class);
				
				QuizActivity.lhm.clear();
				QuizActivity.qid=0;
				startActivity(intent);
				//quiz.countDownTimer.onTick(19);	
			}
		});
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_result, menu);
		return true;
	}
}



[Edit member="Tadit"]
Added pre tags.
[/Edit]
Posted
v4

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900