2012-08-08 4 views
1

타이머에 문제가 있습니다. 그 후 핸들러에서 시작 버튼 값을 누르면 카운트 다운 대신 -22406914 : 0-51이 표시됩니다. 아래 코드는 (나는이 도움을 스스로 도왔다 : http://android-developers.blogspot.com/2007/11/stitch-in-time.html). 나는 당신이 currentTimeMillis (startTime = System.currentTimeMillis();)를 사용하여 startTime을 설정에는 내가 실수를 생각 ...타이머 카운트 다운이 잘못되었습니다

public class biegi extends Activity { 
TextView Todleglosc, Tpredkosc, Tczas; 
ImageView Ibiegacz; 
Button clear, startstop; 
LocationManager locationManager; 
Location lokacjaPoczatkowa; 
String providerName; 
boolean start; 
private long startTime; 
private Handler mHandler = new Handler(); 

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.biegi); 
inicjuj(); 
actionbuttonsc(); 
} // oncreate 

private Runnable mUpdateTimeTask = new Runnable() { 
     public void run() { 
      final long start = startTime; 
       long millis = SystemClock.uptimeMillis() - start; 
       int seconds = (int) (millis/1000); 
       int minutes = seconds/60; 
       seconds  = seconds % 60; 

       if (seconds < 10) { 
        Tczas.setText("" + minutes + ":0" + seconds); 
       } else { 
        Tczas.setText("" + minutes + ":" + seconds);    
       }  
       mHandler.postAtTime(this,start + (((minutes * 60) + seconds +  1) * 1000));    
     }   
    }; 

public void inicjuj(){ 
Todleglosc=(TextView) findViewById(R.id.odleglosc); 
Tpredkosc=(TextView) findViewById(R.id.predkosc); 
Tczas=(TextView) findViewById(R.id.czas); 
Ibiegacz=(ImageView) findViewById(R.drawable.biegacz); 
clear=(Button) findViewById(R.id.clear); 
startstop=(Button) findViewById(R.id.button_bieg_start_stop); 
start=false; 
} 


public void actionbuttonsc() 
{ 
clear.setOnClickListener(new View.OnClickListener() 
     { 
    public void onClick(View v) { 
    Tczas.setText("00:00:00"); 

    } 
}); 

startstop.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
     if (start==false) 
     { 
      Tczas.setText("00:00:01"); 
      startTime = System.currentTimeMillis(); 
      mHandler.removeCallbacks(mUpdateTimeTask); 
      mHandler.postDelayed(mUpdateTimeTask, 100); 
      start=true; 
     } 

else if (start==true) 
    { 
     Tczas.setText("00:00:00"); 
     mHandler.removeCallbacks(mUpdateTimeTask); 
     start=false;       
    }}}); 
} 
} 
+0

당신은 당신의 시작 변수를 출력하고 그래서 정확히 무슨 일이 일어나고 있는지 이야기하는 것이 더 쉽습니다 무엇 말씀해? – Michael

답변

1

이 없습니다, 다음은 uptimeMillis (long millis = SystemClock.uptimeMillis() - start;)를 사용하여 읽어 보시기 바랍니다. 여기

내가 할 것 인 것이다 :

// Change this: 
long millis = SystemClock.uptimeMillis() - start; 
// .. to this: 
long millis = System.currentTimeMillis() - start; 
+0

좋습니다, 감사합니다! :) 그것은 작품이다! 나는 또한 mHandler.postAtTime을 변경했다. (this, start + ((minutes * 60) + seconds + 1) * 1000)); 이것을 위해 : mHandler.postDelayed (this, 1000); 그리고 잘 작동하는 모든 :) –