我的Thread()代码有什么问题?
问题描述:
我对Android应用程序有疑问。我想在稍后创建一个游戏,并且我正在尝试需要了解的类和函数。 现在我试图掌握如何以一种好的方式使用线程,但我的应用程序是“强制关闭”,当我触摸按钮。我的Thread()代码有什么问题?
对于这个测试应用程序,所有在屏幕上都有一个TextView和一个按钮。 该按钮在按下时调用threadStart()。 (onClick in xml) 而我想要它做的是创建一个线程,将变量值增加1,然后向UI线程报告,然后用新值更新文本视图。
有人可以看到我做错了这个小代码片吗?
package com.weldeborn.tc;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class ThreadCounter extends Activity {
TextView txtCounter1;
int value=0;
final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
public void run() {
updateResult();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtCounter1 = (TextView) findViewById(R.id.counter1);
}
protected void threadStart() {
Thread t = new Thread() {
public void run() {
doSomething();
mHandler.post(mUpdateResults);
}
};
t.start();
}
private void doSomething() {
value = value+1;
}
private void updateResult() {
txtCounter1.setText(value);
}
}
我的代码是基于“在UI线程处理昂贵的操作”标题下Android Developer: The Common Tasks and how to do them部分的例子。
我很感激任何帮助。
答
直接传递整数时,setText无法正常工作。尝试将其转换为字符串之前:
txtCounter1.setText(String.valueOf(value));
此外,请检查this answer有关需要更新UI的线程的用法。
没有logcat的错误输出,您将永远无法调试程序。谷歌它,使用它。另外如果你有XML代码,你应该使用它。 – Klaus 2011-03-04 13:23:44
但你的onclickListener在哪里? – 2011-03-04 13:27:56
在buttonView(在main.xml文件中)我使用android:onClick =“threadStart”。我认为它的作用是实现一个onCliclListener,它已经为我以前的应用程序工作过。 – Weldeborn 2011-03-04 14:09:16