Таймер обратного отсчета возвращает логическое значение

У меня есть таймер обратного отсчета, и я хочу вернуть значение, когда я вызываю класс, вот мой класс CountdownTimer

  public class CountDownTimerActivity extends CountDownTimer {
    public  boolean finish = false;
    public CountDownTimerActivity(long startTime, long interval) {
        super(startTime, interval);
    }

    @Override
    public  void onFinish()
    {
    finishTime(true);

    }

    @Override
    public void onTick(long millisUntilFinished) {
        finishTime(false);
       Log.e("TESTINg","" + millisUntilFinished/1000);
    }

    public boolean finishTime(boolean finish) {

        return finish;
    }
}

Вот мой таймер обратного отсчета звонков

  CountDownTimerActivity countdowntimer  = new CountDownTimerActivity(5000,1000);
        countdowntimer.start();
        if(// I DONT KNOW WHAT WILL I PUT HERE)
        {
            Log.e("Testing", "OK na");
        }

Кто-нибудь может мне помочь? Спасибо


person Jude Bautista    schedule 10.12.2015    source источник
comment
что вы имеете в виду опубликовать класс? можешь ли ты показать мне ?   -  person Jude Bautista    schedule 10.12.2015
comment
покажите класс, в котором вы создаете экземпляр обратного отсчета   -  person shakhawat    schedule 10.12.2015
comment
мой единственный класс - CountDownTimer, и я хочу вызвать его в основной деятельности, ведь она вернется, когда он закончит подсчет   -  person Jude Bautista    schedule 10.12.2015


Ответы (4)


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

public class Main extends Activity 
    {
    private MyCountDownTimer myCountDownTimer;

    @Override
    public void onCreate(Bundle savedInstanceState){
        myCountDownTimer = new MyCountDownTimer(5000, 1000);
        myCountDownTimer.start();
    }

    public void finished(){
        Log.e("Testing", "OK na");
    }

    public class MyCountDownTimer extends CountDownTimer {
        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() { 
            finished();
        }

        @Override
        public void onTick(long millisUntilFinished) {
           Log.e("TESTINg","" + millisUntilFinished/1000);
        }
    }
}

См. эту ссылку для получения дополнительной информации/примера: https://androidcookbook.com/Recipe.seam;?recipeId=1205

РЕДАКТИРОВАТЬ, чтобы создать универсальный класс, который можно использовать в других действиях, я бы сделал что-то вроде этого.

Создайте класс MyCountDownTimer, который выглядит так в собственном файле:

    public class MyCountDownTimer extends CountDownTimer {
        private MyCallback myCallback;

        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        public Interface MyCallBack{
            void callback();
        }

        @Override
        public void onFinish() { 
            myCallback.callback();
        }

        @Override
        public void onTick(long millisUntilFinished) {
           Log.e("TESTINg","" + millisUntilFinished/1000);
        }

        public void setMyCallback(MyCallback myCallback){
            this.myCallback = myCallback;
        }
    }

Затем в каждом из ваших действий вы должны реализовать новый интерфейс следующим образом:

public class Main extends Activity implements MyCountDownTimer.MyCallback 
{
    private MyCountDownTimer myCountDownTimer;

    @Override
    public void callback(){
        Log.e("Testing", "OK na");
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        myCountDownTimer = new MyCountDownTimer(5000, 1000);
        myCountDownTimer.setMyCallback(this); //will use the callback method in this class which can be different for each activity
        myCountDownTimer.start();
    }
}
person randal4    schedule 10.12.2015
comment
Да, я понимаю вашу точку зрения, и я сделал это, но мне нужно создать новый класс для вызова целых кодов, потому что я всегда использую таймер обратного отсчета, - person Jude Bautista; 10.12.2015
comment
Заработало ли это после редактирования? Можете ли вы принять ответ, если он вам помог, или дайте мне знать, если вам нужна дополнительная информация. - person randal4; 10.12.2015

CountDownTimer — это очень простой класс, вам не нужно создавать для него целый класс, вы можете создать его в своем вызывающем классе и, таким образом, вы можете вызвать функцию обратного вызова по завершении.

public class MyActivity extends Activity{

    //Other methods and variables

    CountDownTimer countdowntimer  = new CountDownTimer(5000,1000){
        @Override
        public void onFinish() {
            //Call the callback from your activity
        }

        @Override
        public void onTick(long millisUntilFinished) {
            Log.e("TESTINg","" + millisUntilFinished/1000);
        }
    };

}

Если по какой-то причине вы должны сделать это в другом классе, то в этом классе вы должны создать интерфейс, который должна реализовать ваша деятельность, и в вашем методе завершения вызвать метод прослушивателя интерфейса. Как во фрагментах: https://stackoverflow.com/a/34192088/2367237

person Gonzalo    schedule 10.12.2015
comment
я не понимаю вашу точку зрения на фрагменты, я просто хочу класс, который вернет значение логического значения, когда он сделает подсчет - person Jude Bautista; 10.12.2015
comment
Я сказал, что если вам нужна простая вещь, определите CountDownTimer непосредственно в своей деятельности, как в коде. Если вы хотите что-то более сложное и вам нужен другой класс, вы должны следовать шаблону слушателя, как в примере со ссылкой, это пример фрагмента, но тот же шаблон. - person Gonzalo; 10.12.2015

Я не думаю, что вы можете вернуть значение из CountDownTimer. В идеале вы должны запустить таймер и реализовать то, что вам нужно сделать в методах обратного вызова -

abstract void   onFinish()
//Callback fired when the time is up.

abstract void   onTick(long millisUntilFinished)
//Callback fired on regular interval.

Пример реализации =1205

person shakhawat    schedule 10.12.2015
comment
Аннотация ? можешь код доделать? я не понимаю вашу точку зрения извините - person Jude Bautista; 10.12.2015
comment
да, я могу завершить код, вам нужно переопределить методы и сделать то, что вам нужно, в этих переопределенных методах. - person shakhawat; 10.12.2015
comment
куда ? могу я посмотреть, пожалуйста - person Jude Bautista; 10.12.2015
comment
пожалуйста, отправьте мне сообщение на мою электронную почту [email protected], чтобы я мог визуализировать ваш код, спасибо в andvance - person Jude Bautista; 10.12.2015
comment
ВАУУ Я ПОНЯЛ :D СПАСИБОККККССССССС - person Jude Bautista; 10.12.2015

Я думаю, что это не работает, потому что вы никогда не устанавливали для переменной finish значение true в своем коде. Вы должны изменить свой код в методе onFinish, чтобы закончить = true, затем поместить логику в метод onTick, чтобы проверить, завершено ли оно, а затем вызвать метод onFinish();

person Ruelos Joel    schedule 10.12.2015
comment
Также опубликуйте класс yung CountDownTimer для дальнейшего изучения. - person Ruelos Joel; 10.12.2015
comment
Все коды в таймере обратного отсчета больше нет добавленных кодов - person Jude Bautista; 10.12.2015
comment
Я сделал это, но это не работает. Я снова обновлю свой код, чтобы показать, что логика не работает. - person Jude Bautista; 10.12.2015