SharedPreferences和倒数计时器

时间:2012-03-07 17:33:42

标签: android countdowntimer

我想将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(); 


         }

3 个答案:

答案 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(); 

}