2012-08-08 119 views
1

我的计时器有问题。之后,我按下从处理程序显示的-22406914:0-51开始按钮值而不是倒计时。下面是代码(我帮助自己的这个帮助:http://android-developers.blogspot.com/2007/11/stitch-in-time.html)。我不知道在哪里我犯了一个错误......定时器错误倒计时

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 2012-08-08 20:53:49

回答

1

您使用currentTimeMillisstartTime = System.currentTimeMillis();)设置startTime,然后读取它使用uptimeMillislong 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);和所有工作正常:) – 2012-08-09 11:18:02