我有一个我创建的倒数计时器(在你建议内置的计时器之前,我在past中有未解决的问题)。很明显,我并没有正确地格式化这个,但我似乎无法让它去了...#mm; ss"对于我的数据。相反,我得到了" mmmmmmm:ss"。我哪里出错了?
TimerTask mTimerTask;
final Handler handler = new Handler();
Timer t = new Timer();
private long nCounter = 180000;
int minutes;
int seconds;
public void doTimerTask(){
mTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
if(nCounter<=0){
stopTask();
return;
}
nCounter--;
// seconds = (int) ((nCounter / 1000) % 60);
// minutes = (int) ((nCounter / 1000) / 60);
seconds = (int)(nCounter) % 60 ;
minutes = (int)((nCounter-seconds)/60);
// update TextView
timerTextView.setText(String.format("%d:%02d", minutes, seconds));
}
});
}};
// public void schedule (TimerTask task, long delay, long period)
t.scheduleAtFixedRate(mTimerTask,0,1000);
}
答案 0 :(得分:0)
此行为符合预期。您正在使用"%d:%02d"
在分钟部分中按原样显示您的数字。但即使您使用"%02d:%02d"
,您仍然不会将时间格式化为mm:ss,因为您的minutes
大于格式范围(即nCounter
为180000时为3000)。在"%02d"
的情况下,如果数字低于10,则只会看到效果(例如9将打印为09)。
此外,您不应该从long转换int因为它不安全。如果原始值大于最大值,您可能会看到结果突然变为负值。您应该在此处仅使用long或int来满足您的所有需求。