根本无法 运行 倒计时

can not run countdowntimer at all

我遇到倒计时问题 timer.I 尝试了该站点中的一些解决方案和文章,但它们对我没有用。所以,请阅读我的代码...

我也用过

handler.postDelayed(new Runnable() { 

以前,这不是我的解决方案,但它工作正常。

主要问题是:

我想做如下的事情:

(button pressed)

do some codes1    
delay1

do other codes2    
delay2 

go back to *do some codes1* again.

简而言之,这是我的真实代码:

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

这是我的职能:

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



}

我尝试使用一个变量 insted 50000,但无论如何它都没有用。

我试图将 setrelax 函数代码直接放入 oncreate 中,但没有成功。 它刚刚跳到

}.start();

yourCountDownTimer1.cancel();

每次都出去

所有没有延迟功能的代码我都试过了,都运行正常。

请问我哪里错了...

我查看了您的代码,但没有发现任何重大错误,但请改用此方法

而不是

.start();

使用

yourCountDownTimer1.start(); 

并删除 yourCountTimer1.cancel(); 像这样:

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



}

希望对您有所帮助。

下面是我们 code.you 中 运行 otp 定时器的代码 可以复制粘贴 我已经提到评论请遵循相同的。

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

        }
    };

您需要记住,使用 CountDownTimer 时您的代码不会按顺序执行,因为它是异步工​​作的(通过 Handler)。

让我们剖析您的代码。您在此处的以下代码:

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

}

将是 运行 以下序列:

    1. 正在创建 CountDownTimer
    1. CountDownTimer 已取消。
    1. onTick 重复调用了 49 次 (50000/1000 = 50 - 1 )。
    1. onFinish 调用

因此,将您的算法更改为如下内容:

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

您需要调用 CountDownTimer.onFinish()

中的下一个代码