Использование таймера для подсчета секунд и обновления строки в действии

Я пытаюсь создать таймер в одном из своих действий, который будет запускаться каждую секунду, увеличивать переменную секунд, а затем увеличивать минуты на единицу, если секунды == 60, увеличивая часы на единицу, если минуты == 60.

    _currentSeconds = _level.GetTimeSpentSeconds();
    _currentMinutes = _level.GetTimeSpentMinutes();
    _currentHours = _level.GetTimeSpentHours();

    String currentTimeDisplay = _currentHours + "H " + _currentMinutes +"M " + _currentSeconds +"S";

    _txtCurrentTime = findViewById(R.id.txtCurrentTime);
    _txtCurrentTime.setText(currentTimeDisplay);

    _totalGameTime = new Timer();
    _totalGameTime.schedule(new TimerTick(), 1000);

}

private class TimerTick extends TimerTask{
    TextView _txtCurrentTime = findViewById(R.id.txtCurrentTime);
    public void run()   {
        _currentSeconds++;
        TextView _txtCurrentTime = findViewById(R.id.txtCurrentTime);
        if (_currentSeconds == 60){
            _currentSeconds = 0;
            _currentMinutes++;
        }

        if (_currentMinutes == 60){
            _currentMinutes = 0;
            _currentHours++;
        }

        String currentTimeDisplay = _currentHours + "H " + _currentMinutes +"M " + _currentSeconds +"S";
        _txtCurrentTime.setText(currentTimeDisplay);
        _level.SetTimeSpentSeconds(_currentSeconds);
        _level.SetTimeSpentMinutes(_currentMinutes);
        _level.SetTimeSpentHours(_currentHours);
    }
}

Трудно точно сказать, как программа реагирует, из-за того, насколько длинной стала моя активность с подключенным отладчиком, но, похоже, это не помогает, TextView остается прежним.

Выяснил, что это сбой, потому что по какой-то причине у .setText для моего текстового представления были проблемы с байтами, и ему пришлось преобразовать их в строки с помощью Integer.toString(_currentSeconds). Понятия не имею, почему выполнение этого по таймеру вызывало эту проблему.

bjacob596 23.04.2019 15:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для этого вам не нужно использовать TimerTask. Вы можете использовать один из следующих вариантов:

  1. Вы можете использовать этот класс, который я написал для аналогичной цели — CountUpTimer. Вам нужно будет определить onTick() для обновления вашего TextView каждый временной интервал mCountUpInterval (определенный в классе CountUpInterval)
  2. Хронометр

Используйте хронометр... Просто реализуйте хронометр в XML или коде и используйте его метод start() для его запуска и метод stop() для его остановки. https://developer.android.com/reference/android/widget/Хронометр

Другие вопросы по теме