Я пытаюсь создать таймер, отсчитывающий в секундах, и каждый раз обновляет TextView, чтобы показать оставшееся время. Из того, что я могу сказать, код таймера работает нормально (1 секунда между событиями и конвертирует с hrs и mins в secs fine), потому что я тестировал его вне Android и используя Log.d() в android. Обновление текстового поля - вот что дает мне проблемы. Я получал нулевые указатели, когда первоначально пытался обновить textview, потому что только поток пользовательского интерфейса может получить доступ к пользовательскому интерфейсу (моя интерпретация сообщения об ошибке), и я добавил runOnUiThread(), который позволяет ему получать доступ и обновляться, но теперь он не обновить правильно. Я думаю, что это проблема, но я не совсем уверен и не знаю достаточно, чтобы понять, как ее исправить, или придумать лучший способ сделать это. Я бы оценил еще один набор глаз. БлагодаряПроблемы с созданием таймера в android
final static int delay = 1000;
final static int period = 1000;
public void start(int hin, int min) {
run = true;
int hrinsec = (hin * (60 * 60));
int mininsec = (min * 60);
secs = hrinsec + mininsec;
run = false;
interval = secs;
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
// Convert seconds back to hrs and mins
hrsFromSecs(secs);
minsFromSecs(secs);
secsFromSecs(secs);
dint total = hours + minutes + seconds;
output = hours + " Hours " + minutes + " Minutes " + seconds
+ " Seconds";
// Countdown and update the textview
runOnUiThread(new Runnable() {
@Override
public void run() {
timer.setText(output);
}});
secs = secs - 1;
checkIfDone(total);
}
}, delay, period);
}
Вы должны использовать AsyncTask для синхронизации задач. Не запускайте в потоке пользовательского интерфейса. – ChuongPham