android中的计时器崩溃抛出java.util运行时错误

时间:2014-01-03 18:20:55

标签: android

我正在尝试设计一个简单的计时器,它会在每秒运行并将我的按钮文本更新为剩余时间。 但是,当我运行它继续崩溃。 我所知道的是错误在我的按钮中,因为我的代码碰巧运行了第一秒,然后崩溃了。 这是我的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();
}

}

2 个答案:

答案 0 :(得分:1)

button.setText("ankur");无法在计时器中更新ui。 Timer Task在不同的线程上运行。你只能在ui线程上更新ui。

您的选择

  1. 使用Handler

  2. 使用runOnUiThread

  3. 您可以根据需要使用CountDownTimer

  4. 您可以将runOnUiThread用作

     runOnUiThread(new Runnable() {
        public void run() {
        button.setText("ankur")
        }
    });
    

    对于Handler

    Android Thread for a timer

答案 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
                    }
              });