我的目的很简单,我想创建一个从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();
}
}
答案 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块