为什么这个计时器任务格式会赢得" mm:ss"?

时间:2015-04-30 03:07:58

标签: android timertask

我有一个我创建的倒数计时器(在你建议内置的计时器之前,我在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);

}

1 个答案:

答案 0 :(得分:0)

此行为符合预期。您正在使用"%d:%02d"在分钟部分中按原样显示您的数字。但即使您使用"%02d:%02d",您仍然不会将时间格式化为mm:ss,因为您的minutes大于格式范围(即nCounter为180000时为3000)。在"%02d"的情况下,如果数字低于10,则只会看到效果(例如9将打印为09)。

此外,您不应该从long转换int因为它不安全。如果原始值大于最大值,您可能会看到结果突然变为负值。您应该在此处仅使用long或int来满足您的所有需求。