这里我有一个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。问题是,即使我在OnFinish()中调用this.start(),我在使用this.start时也会遇到这个NullPointerException错误。如果能帮上忙我会很感激。谢谢!附言:当计时器低于10秒时,我也有一个问题,在这之后,以下数字会出现,但会有一个奖励数字。(95,85,75...15)。如果在我的:
if(seconds<10)
seconds=timer2/1000;
else
seconds = timer2 / seconds_in_millies;我会用timer2/10000修改秒数=timer2/1000,它根本不显示数字,而是停在10。
发布于 2012-03-16 20:50:39
你能做到的..。
在你的oncreate中
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
Date date = (Date)settings.getString("date",0);
Calendar c = Calendar.getInstance();
Date d=c.getTime();
long diffInMs = d.getTime() - date.getTime();
long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMis);
if (diffInSec>86400)
{
SharedPreferences myPrefs = this.getSharedPreferences("PREFS_NAME",0);
SharedPreferences.Editor ed = myPrefs.edit();
ed.putString("Date", String.valueOf(d));
ed.commit();
//allow your activity to open
}
else
{
counter= new MyCount(diffInSec*1000,1000);
counter.start();
}MyCount类
public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
Intent k=new Intent(Myactivity.this,Myactivity.class);
startActivity(k);
}
@Override
public void onTick(long millisUntilFinished) {
s1=millisUntilFinished;
<---- display s1/1000 to show number of seconds left
}
}}
希望这能行得通。
发布于 2012-03-16 18:33:58
这会给你一个无限的倒计时计时器。30秒..您可以计算创建新计时器的次数,以获得总时间。像这样
MyCount counter;
counter=new MyCount(30000,1000);
counter.start();MyCount类
public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
counter= new MyCount(30000,1000);
counter.start();
n=n+1;
}
@Override
public void onTick(long millisUntilFinished) {
s1=millisUntilFinished;
r1=(30000-s1)/1000;
}
}
}若要获取经过的总时间...
int time=(n*30)+r1;<--- total time elapsed..暂停计时器使用
counter.cancel();恢复使用
counter= new MyCount(s1,1000);
counter.start();https://stackoverflow.com/questions/9735490
复制相似问题