我想将CountDown Ttimer值保存到变量中,以便下次用户启动Countdowntimer Activity时,它会在剩余的确切时间内重新加载。 这是我的代码,我不明白为什么它不起作用。 (它显示我的时间文本框为空)
prefs = PreferenceManager.getDefaultSharedPreferences(this);
long timer = prefs.getLong("TIME", 86400000);
new CountDownTimer(timer, 1000) {
public void onTick(long elapsed) {
System.out.print(elapsed);
long timer2=elapsed;
long hours = timer2 / hours_in_millies;
timer2 %= hours_in_millies;
long minutes = timer2 / minutes_in_millies;
timer2 %= minutes_in_millies;
long seconds = timer2 / seconds_in_millies;
time.setText(hours + ":" + minutes + ":" + seconds);
SharedPreferences.Editor editor = prefs.edit();
editor.putLong("TIME",elapsed);
editor.commit();
}
答案 0 :(得分:0)
如果我是正确的,那么您正在更新共享首选项。这可能是一个坏主意。最好在onStop上保存计时器上的时间戳和时间,然后onResume计算已经过了多少时间并从那里拿起它。
答案 1 :(得分:0)
我没有在ontick()中看到你的timer
变量,你使用了timer2
变量。
在setText()行之前放置一个记录器Log.d()
以检查您正在使用的变量的结果...否则editText不能绝对为空
此外,在活动的onStop()中保存共享首选项中的时间..而不是每个计时器的Tick!
修改强> 在澄清OP
的要求之后你可能想要采用不同的方法.. 说倒计时必须开始时..使用System.currentTimeMillis()来获取START TIME 并将其存储在SharedPreferences / DB中。
每当活动开始时...... 获取 START_TIME frm偏好设置...并以(System.currentTimeMillis - START_TIME)和onTick()更新的初始时间启动计时器计时器(UI)。 注意:您现在不必将计时器值更新回SharedPreferences
答案 2 :(得分:0)
解决:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
xtime = System.currentTimeMillis()-prefs.getLong("TIME",System.currentTimeMillis());
long timer=86400000-(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) {
Log.d(TAG, "TIMER" + System.currentTimeMillis());
long timer2=elapsed;
long hours = timer2 / hours_in_millies;
timer2 %= hours_in_millies;
long minutes = timer2 / minutes_in_millies;
timer2 %= minutes_in_millies;
long seconds = timer2 / seconds_in_millies;
time.setText(hours + ":" + minutes + ":" + seconds);
}
public void onFinish()
{ Intent intent = new Intent(Hug.this, Hug_Accepted.class);
startActivity(intent);
}
}
.start();
xtime=System.currentTimeMillis();
SharedPreferences.Editor editor2 = prefs.edit();
editor2.putLong("TIME",xtime);
editor2.commit();
}