can not run countdowntimer at all

丶灬走出姿态 提交于 2019-12-13 02:58:08

问题


I have a problem with countdown timer.I try some of solutions and articles in this site but they never worked for me. so, please read my codes...

also I used

handler.postDelayed(new Runnable() { 

before and it was not my solution but it just worked correctly.

Main question is:

I want to do something like below:

(button pressed)

do some codes1    
delay1

do other codes2    
delay2 

go back to *do some codes1* again.

In short, this is my real code:

 itimesec--;
 setdelay();
 irepeat--;
 setrelax();

and this is in my functions:

 public void setrelax(){
  CountDownTimer yourCountDownTimer1 = new CountDownTimer(50000, 1000) {

        public void onTick(long millisUntilFinished1) {

            itotalsnozee--;
            TextToSpeechFunction(" "+itotalsnozee);
        }

        public void onFinish() {
            itotalsnozee=fitotalsnozee;
            isrelax=false;
            TextToSpeechFunction("do again");
        }
    }.start();

    yourCountDownTimer1.cancel();



}

I tried to use a variable insted of 50000 but it was not useful anyway.

I tried to put setrelax funtion codes directly into oncreate but it never worked. it just jumped to

}.start();

yourCountDownTimer1.cancel();

every times and go out.

I tried all the codes without any delay function and they runned correctly.

what is my wrong please...


回答1:


You need to remember that your code won't be executed sequentially when using the CountDownTimer because it's working asynchronously (via Handler).

Let's dissect your code. Your following code here:

public void setrelax(){
  // 1. Creating CountDownTimer
  CountDownTimer yourCountDownTimer1 = new CountDownTimer(50000, 1000) {

        public void onTick(long millisUntilFinished1) {
            // 2. onTick called
            ...
        }

        public void onFinish() {
          // 3. onFinish called
            ...
        }
    }.start();

   // 4. CountDownTimer is cancelled.
    yourCountDownTimer1.cancel();

}

will be running in the following sequences:

    1. Creating CountDownTimer
    1. CountDownTimer is cancelled.
    1. onTick called 49 times repeatedly (50000/1000 = 50 - 1 ).
    1. onFinish called

So, change your algorithm to something like this:

do some codes1
delay1
--> When delay finished, do other codes2. Then do delay2

You need to call the next code in the CountDownTimer.onFinish()




回答2:


I looked at your code and I could not find any big mistakes but try this instead

Instead of

.start();

use

yourCountDownTimer1.start(); 

and remove yourCountTimer1.cancel(); like this :

 public void setrelax(){
  CountDownTimer yourCountDownTimer1 = new CountDownTimer(50000, 1000) {

        public void onTick(long millisUntilFinished1) {

            itotalsnozee--;
            TextToSpeechFunction(" "+itotalsnozee);
        }

        public void onFinish() {
            itotalsnozee=fitotalsnozee;
            isrelax=false;
            TextToSpeechFunction("do again");
        }
    };yourCountDownTimer1.start();



}

Hope it helps.




回答3:


below is the code for running otp timer in our code.you can copy paste i have mentioned the comments please follow the same.

 CountDownTimer countDownTimer;  //define countDownTimer 
 countDownTimer.start();   // start countdown timer on some event like on click

  String x="Your code will expire In";
  String y="mins";
  counttimer(); call the method counttimer which includes all the code of timer

  public void counttimer(){
    countDownTimer = new CountDownTimer(30000, 1000) {

        public void onTick(long millisUntilFinished) {
            String text = String.format(Locale.getDefault(), x+" %02d : %02d "+y,
                    TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
                    TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60);
            phonever_timer.setText(text);   //set timer into textview object
        }

        public void onFinish() {

            phonever_timer.setText("Otp Expired..!");

        }
    };


来源:https://stackoverflow.com/questions/51049533/can-not-run-countdowntimer-at-all

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!