Здесь у меня есть этот CountDownTimer, который я хочу запускать и перезапускать в бесконечном цикле, и я не знаю, почему он не работает:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
xtime = System.currentTimeMillis()-prefs.getLong("time",System.currentTimeMillis());
timer=24000-(xtime+prefs.getLong("time2",0));
final SharedPreferences.Editor editor = prefs.edit();
editor.putLong("time2",xtime+prefs.getLong("time2",0));
editor.commit();
new CountDownTimer(timer, 1000) {
public void onTick(long elapsed) {
long timer2=elapsed;
hours = timer2 / hours_in_millies;
timer2 %= hours_in_millies;
minutes = timer2 / minutes_in_millies;
timer2 %= minutes_in_millies;
Log.v(TAG, "seconds" + seconds);
if(seconds<10)
seconds=timer2/1000;
else
seconds = timer2 / seconds_in_millies;
if(seconds<10)
seconds=timer2/100;
if(seconds>1&&seconds<2)
seconds=0;
if(hours>=10&&minutes>=10&&seconds>=10)
time.setText(hours + ":" + minutes + ":" + seconds);
else
if (hours<10&&minutes>=10&&seconds>=10)
time.setText("0"+hours + ":" + minutes + ":" + seconds);
else
if (hours<10&&minutes<10&&seconds>=10)
time.setText("0"+hours + ":0" + minutes + ":" + seconds);
else
if (hours>=10&&minutes<10&&seconds<10)
time.setText("0"+hours + ":0" + minutes + ":0" + seconds);
else
if(hours>=10&&minutes>=10&&seconds<10)
time.setText(hours + ":" + minutes + ":0" + seconds);
else
if (hours>=10&&minutes<10&&seconds<10)
time.setText(hours + ":0" + minutes + ":0" + seconds);
else
if(hours>=10&&minutes<10&&seconds>=10)
time.setText(hours + ":0" + minutes+":" + seconds);
else if(hours<10&&minutes>=10 && seconds<10)
time.setText("0"+hours + ":" + minutes +":0"+ seconds);
}
public void onFinish()
{ editor.clear();
this.start();
}
}.start();
xtime=System.currentTimeMillis();
SharedPreferences.Editor editor2 = prefs.edit();
editor2.putLong("time",xtime);
editor2.commit();
}
SharedPreferences помогает мне восстановить CountDownTimer с того момента, когда действие закончилось с использованием моего алгоритма. Проблема в том, что даже если я вызываю this.start() в моем OnFinish(), у меня есть эта ошибка NullPointerException в строке с this.start. Буду признателен за помощь. Благодарю вас! P.S: У меня тоже проблема, когда таймер опускается ниже 10 секунд, после чего появляются следующие числа, но с бонусной цифрой. (95,85,75...15). Если в моем:
if(seconds<10)
seconds=timer2/1000;
else
seconds = timer2 / seconds_in_millies;
Я бы изменил second=timer2/1000 на timer2/10000, он вообще не показывает числа и останавливается на 10.