2012-03-07 2 views
0

Countdown Ttimer 값을 변수에 저장하여 사용자가 다음에 Countdowntimer 활동을 시작할 때 정확한 경과 시간으로 다시로드 할 수 있도록하려고합니다. 여기 내 코드가 있는데 왜 작동하지 않는지 이해할 수 없습니다. 내가 올바른 오전 경우, 공유 환경 설정을 꽤 업데이트하는SharedPreferences 및 Countdown Timer

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


     } 
+0

ypu 무엇을 당신의 sysouts에서받을 수 있나요? SharedPreferences가 작동 중입니까? – Moritz

답변

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

} 
0

(비어 나의 시간 텍스트 상자를 보여줍니다). 이것은 아마도 나쁜 생각 일 것입니다. 시간 스탬프와 시간을 onStop의 타이머에 저장 한 다음 onResume에서 얼마나 많은 시간이 경과했는지 계산하고 거기에서 다시 가져 오는 것이 좋습니다.

+0

신청서가 닫히면 어떻게됩니까? – AnTz

+0

응용 프로그램이 닫히면 onStop을 호출해야합니다. 그 시점에서 귀하의 pref가 저장됩니다. – Pyrodante

+0

뒤로 버튼을 누른 클래스에서 editor.commit()을 사용해야합니까? 또한 타이머가 만료되면 어떻게해야합니까? – AnTz

0

timer 변수가 ontick()에서 사용되는 것을 볼 수 없으므로 timer2 변수를 사용했습니다. ,

또한 그렇지 않으면 글고 확실히 비어있을 수 없습니다 당신이 ... 사용하는 변수의 결과를 확인의 setText() 라인 전에 로거 Log.d()을 넣어의) (중지시에서 공유 환경 설정에서 시간을 절약하여 타이머의 각 틱에 활동이 없습니다!

편집 : 당신은 .. 다른 접근 방식을 따라 카운트 다운이 시작해야 할 때 말을 할 수 있습니다

OP에서 요구 사항의 설명 후 ...에 System.currentTimeMillis()를 사용하여 얻을 수 있습니다 시작 시간 및 SharedPreferences/DB에 저장하십시오.

활동이 시작할 때마다

... START_TIME의 FRM은 기본 설정을 가져 ... 그리고 (에 System.currentTimeMillis - START_TIME)로 초기 시간 타이머를 시작 및 onTick() 타이머 (UI)를 업데이트합니다. 참고 : 이제 다시 된 SharedPreferences 해결

+0

로그를보고 변수 저장 부분을 OnBackPressed 메서드에 넣었습니다. 문제가 긴 타이머 = prefs.getLong ("TIME", 86400000); , 그것은 항상 그 86400000에서 다시 시작하는 것 같습니다. – AnTz

+0

당신의 업데이트 된 코드를 표시 할 수 ... 올바른 방법은 onTick() 최신 분/시간을 저장할 수 ... 로컬 (활동 범위) variables .. 그리고 sharedpreferences 변수를 사용하여 코드를 업데이트하는 코드 .... –

+0

오, 이제는 이것이 내가 정말로 원했던 것이 아니라는 것을 알게되었습니다. 나는 방금 활동 또는 응용 프로그램이 닫히더라도 계속 체크 할 카운트 다운 타이머를 원했습니다. 누군가 나를 도울 수 있습니까? 그것에 대한 게시물을 찾았지만 서비스를 사용함을 의미합니다. 서비스에 대해서는 알지 못합니다. – AnTz