我正在尝试设计一个简单的计时器,它会在每秒运行并将我的按钮文本更新为剩余时间。 但是,当我运行它继续崩溃。 我所知道的是错误在我的按钮中,因为我的代码碰巧运行了第一秒,然后崩溃了。 这是我的java代码
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
public class information extends Activity {
Timer timer;
public Button button;
private int min = 5;
private int sec = 0;
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(R.layout.information);
button = (Button) findViewById(R.id.gettime);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (sec == 0){
sec = 60;
min--;
}
sec--;
if (sec >=10)
Log.d("time",min+":"+sec);
else Log.d("time",min+":0"+sec);
button.setText("ankur");
}
}, 10, 1000);
}
public void onPause(){
super.onPause();
finish();
}
public void onBackPressed(){
super.onBackPressed();
finish();
}
}
答案 0 :(得分:1)
button.setText("ankur");
无法在计时器中更新ui。 Timer Task在不同的线程上运行。你只能在ui线程上更新ui。
您的选择
使用Handler
。
使用runOnUiThread
。
您可以根据需要使用CountDownTimer
。
您可以将runOnUiThread
用作
runOnUiThread(new Runnable() {
public void run() {
button.setText("ankur")
}
});
对于Handler
答案 1 :(得分:1)
因为您正在从这一行中的后台线程修改UI:
button.setText("ankur");
你必须使用像:
这样的处理程序// in your activity and then
private Handler handler = new Handler();
并在你的TimerTask中:
handler.post(new Runnable() {
public void run(){
// do your UI job
}
});