can not run countdowntimer at all

2019-08-22 06:34发布

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...

3条回答
对你真心纯属浪费
2楼-- · 2019-08-22 07:13

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.

查看更多
Bombasti
3楼-- · 2019-08-22 07:15

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

查看更多
萌系小妹纸
4楼-- · 2019-08-22 07:16

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..!");

        }
    };
查看更多
登录 后发表回答