не может запустить отсчет времени вообще - PullRequest
0 голосов
/ 26 июня 2018

У меня проблема с временем обратного отсчета. Я пробую некоторые решения и статьи на этом сайте, но они никогда не работали для меня. так что, пожалуйста, прочитайте мои коды ...

также я использовал

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

каждый раз и выходи.

Я перепробовал все коды без какой-либо функции задержки, и они работали правильно.

в чем дело, пожалуйста ...

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

ниже приведен код для запуска таймера 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..!");

        }
    };
0 голосов
/ 27 июня 2018

Вы должны помнить, что ваш код не будет выполняться последовательно при использовании CountDownTimer, потому что он работает асинхронно (через обработчик).

Давайте разберем ваш код. Ваш следующий код здесь:

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 называется

Итак, измените ваш алгоритм на что-то вроде этого:

сделать несколько кодов1
delay1
-> Когда задержка закончилась, введите другие коды2. Тогда сделайте delay2

Вам необходимо позвонить по следующему коду в CountDownTimer.onFinish()

0 голосов
/ 27 июня 2018

Я посмотрел ваш код и не смог найти каких-либо серьезных ошибок, но попробуйте вместо этого

Вместо

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



}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...