Задача выполняется только один раз

93
06 марта 2022, 04:50

Решил реализовать в коде обновление информации по API запросу через определенный интервал времени. Сразу по нажатию кнопки информация приходит в соответствующие TextView, потом - тишина. т.е. информация не меняется. За обновление информации отвечает функция getResponse - на первоначальном нажатии кнопки информация отдается на экран. Что не так с описание процесса Timer? Интервал обновления стоит 1 секунда.

Вот фрагменты кода по работе с Timer:

Обработчик нажатия кнопки Старт-Стоп:

public void didTapButton(View view) {
    if(timer != null){
        timer.cancel();
    }
    if (isEnabled) {

    player.setPlayWhenReady(true);
        isEnabled = false;
        timer = new Timer();
        mTimerTask = new MyTimerTask();
        timer.schedule(mTimerTask,1000);
        getResponse(); //parsing ArtistName & TrackName
    }
    else
    {
        player.setPlayWhenReady(false);
        isEnabled = true;
    }
}

Класс MyTimerTask:

class MyTimerTask extends TimerTask{
    @Override
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                getResponse(); //parsing ArtistName & TrackName                 
            }
        });
    }
}
Answer 1

Вы используете такой вариант метода shedule:

public void schedule (TimerTask task, long delay)

В нём второй аргумент отвечает за задержку перед однократным выполнением задачи.

Чтобы сделать выполнение с некоторой периодичностью, нужно использовать метод shedule:

public void schedule (TimerTask task, long delay, long period)

В нём третьим аргументом будет количество миллисекунд между успешными выполнениями задачи.

Answer 2

Да, действительно, немного видоизменил код, все работает. class Mytimer соответственно остается без изменений. Решение выглядит вот:

public void didTapButton(View view) {
    if(timer != null){
        timer.cancel();
    }
    if (isEnabled) {
    player.setPlayWhenReady(true);
        isEnabled = false;
        timer = new Timer();
        mTimerTask = new MyTimerTask();
        timer.schedule(mTimerTask,50, 1000);
        getResponse(); //parsing ArtistName & TrackName
    }
    else
    {
        player.setPlayWhenReady(false);
        isEnabled = true;
    }
}
READ ALSO
Cортировка листа по фамилии в файле

Cортировка листа по фамилии в файле

Не могу разобраться как сортировать в файле по фамилии

235
Логика действий постинкрементов

Логика действий постинкрементов

Помогите разобраться в логике действийЧто левый оперант всегда сохраняется отдельно и потом возвращается более менее осознал в некоторых...

77