java - Android CountDown Timer in Quiz Application -
java - Android CountDown Timer in Quiz Application -
i have made quiz application include 5 questions. have made resultactivity page displays result of quiz. have added countdown timer of 20 sec each question. when countdown timer finishes moves next question automatically. when questions finished should move resultactivity page display result.
i have 1 issue... afetr reaching lastly question..if not select reply , timer finished applicaton not moving resultactivity page..the timer getting started 1 time again , 1 time again on same question until select option
here code:
quizactivity.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 timer 1 time 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 timer 1 time again countdowntimer.start(); } } @override public void ontick(long millisuntilfinished) { rt.settext((millisuntilfinished / 1000) + ""); log.e("second gone", "another sec 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 reply = (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); // score intent.putextras(b); // set score next intent startactivity(intent); homecoming 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 selection ", "without "+wrong); // toast.maketext(getapplicationcontext(), // "please select atleast 1 option",toast.length_short).show(); } homecoming true; } } resultactivity.java: bundle 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 menu; adds items action bar if present. getmenuinflater().inflate(r.menu.activity_result, menu); homecoming true; } }
this because homecoming false statement never reached if user has made no choice:
if (rda.ischecked() || rdb.ischecked() || rdc.ischecked()){}
in if else statement homecoming false later. if none selected, automatically homecoming true because code block within statement above not rached. , in timer say:
if (getnextquestion(false)) { // start timer 1 time again countdowntimer.start(); }
getnextquestion allways true if user makes no choice, timer starts 1 time again , again.
java android timer
Comments
Post a Comment