我对Android应用程序有疑问。我想,稍后,创建一个游戏,我目前正在尝试我需要理解的类和功能。 目前我试图抓住如何以良好的方式使用线程,但当我触摸按钮时,我的应用程序是“强行关闭”。
对于此测试应用程序,屏幕上的所有内容都是一个TextView和一个按钮。 按下按钮时调用threadStart()。 (onClick in xml) 我想要它做的是创建一个线程,将变量 value 增加1,然后向UI线程报告,然后用新值更新textview。
有人可以通过这些小代码看到我做错了吗?
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部分中的示例。
我感谢任何帮助。
答案 0 :(得分:1)
setText无法正常工作。尝试在之前将其转换为String:
txtCounter1.setText(将String.valueOf(值));
另外,请检查this answer有关需要更新UI的线程的使用情况。
答案 1 :(得分:0)
如果您点击threadStart
,则签名需要
public void threadStart(View v)