SharedPreferences и таймер обратного отсчета - PullRequest
0 голосов
/ 07 марта 2012

Я хочу сохранить значение CountDown Ttimer в переменную, чтобы в следующий раз, когда пользователь запустил действие Countdowntimer, оно перезагрузилось в то время, которое осталось.Вот мой код, и я не понимаю, почему он не работает.(показывает мое время Текстовое поле пусто)

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 голосов
/ 07 марта 2012

Я не вижу, чтобы ваша переменная timer использовалась в ontick (), вы использовали переменную timer2.Поместите регистратор Log.d() перед строкой setText (), чтобы проверить результаты для переменных, которые вы используете ... в противном случае editText не может быть определенно пустым

Более того, сэкономьте время в общем доступепредпочтения в onStop () вашей активности .. не на каждом тике таймера!

РЕДАКТИРОВАТЬ: После уточнения требования из OP

Возможно, вы захотите использовать другой подход ... скажем, когда должен начаться отсчет .. используйте System.currentTimeMillis (), чтобы получить ВРЕМЯ ПУСКА и сохранить его в SharedPreferences / DB.

всякий раз, когда начинается действие ... извлечение настроек START_TIME из ... и запуск таймера с начальным временем как (System.currentTimeMillis - START_TIME) и onTick () обновляют таймер (UI). ПРИМЕЧАНИЕ. Теперь вам не нужно обновлять значение таймера до SharedPreferences

0 голосов
/ 09 марта 2012

Решено:

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

}
0 голосов
/ 07 марта 2012

Если я прав, вы немного обновляете общие настройки. Это, наверное, плохая идея. Было бы лучше сохранить метку времени и время на таймере на onStop, а затем onResume рассчитать, сколько времени прошло, и забрать его оттуда.

...