当我使用这个线程代码时,我的应用程序崩溃了

时间:2015-12-02 19:09:07

标签: java android multithreading button android-studio

我的目的很简单,我想创建一个从10到1的倒计时。我尝试使用谷歌给出的倒计时但是我不能把它作为一个线程,所以我用这种方式来创建相同的功能,但我有这个代码的问题。当我使用这个线程代码时我的应用程序崩溃。请帮助我。

public class MainActivity extends Activity { 
TextView textView;
Handler handler = new Handler(){

    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        super.handleMessage(msg);
        String string = textView.getText().toString();
        int num = Integer.parseInt(string);
        num = num-1;
        string = Integer.toString(num);
        textView.setText(string);
    }

};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView) findViewById(R.id.textView);
}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    Thread myThread = new Thread(new Runnable(){

        @Override
        public void run() { 
            // TODO Auto-generated method stub
          for(int i = 10; i>0;i--){
              try {
                Thread.sleep(1000);
                //handler.sendMessage(handler.obtainMessage());
                handler.sendMessage(handler.obtainMessage());

              } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

          } 
        }
    });
    myThread.start();

}



}

1 个答案:

答案 0 :(得分:1)

你的问题与线程有关,它与这些线

String string = textView.getText().toString(); 
int num = Integer.parseInt(string);

你可能有一个textView从XML中的一些文本开始("大文本")。去掉它。 "大文字"不是一个数字,所以当你在原始字符串上调用parseInt()时,它试图转换"大文本"一个数字。

试试这段代码:

try {
    String string = textView.getText().toString(); 
    int num = Integer.parseInt(string);  
    textView.setText(String.valueOf(--num)); 
catch(NumberFormatException ignored){

}

使用try / catch块