0

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


         }
4

3 回答 3

0

如果我是正确的,那么您正在相当多地更新共享首选项。这可能是个坏主意。最好在 onStop 上保存时间戳和计时器上的时间,然后 onResume 计算已经过去了多少时间并从那里获取。

于 2012-03-07T17:35:52.630 回答
0

我没有看到你的timer变量在 ontick() 中被使用,你已经使用了timer2变量。在 setText() 行之前放置一个记录器Log.d()以检查您正在使用的变量的结果...否则 editText 不能绝对为

此外,将时间保存在活动的 onStop() 中的共享首选项中。而不是在每个计时器滴答声上!

编辑: 在澄清OP的要求后

您可能想要采用不同的方法.. 说倒计时必须开始.. 使用 System.currentTimeMillis() 获取开始时间并将其存储在 SharedPreferences/DB 中。

每当活动开始...获取START_TIME frm 首选项...并以(System.currentTimeMillis - START_TIME)和 onTick() 的初始时间启动计时器并更新计时器(UI)。注意:您现在不必将计时器值更新回 SharedPreferences

于 2012-03-07T18:19:51.463 回答
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(); 

}
于 2012-03-09T18:33:21.127 回答