Android 创建视图层次结构的原始线程可以接触其视图
如果DB中的特定计数大于0,我将尝试启动动画,并尝试将计数值设置为textView。我有一个计时器来检查每一秒钟的表计数是否大于0 在Oncreate中调用timeMethodAndroid 创建视图层次结构的原始线程可以接触其视图,android,timer,Android,Timer,如果DB中的特定计数大于0,我将尝试启动动画,并尝试将计数值设置为textView。我有一个计时器来检查每一秒钟的表计数是否大于0 在Oncreate中调用timeMethod private void timerMethod() { //Set the schedule function and rate t.scheduleAtFixedRate(new TimerTask() { @Override public void run(
private void timerMethod()
{
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask()
{
@Override
public void run()
{
updatescreen();
}
}, 0, 1000);
}
private void updatescreen()
{
DB = new Databasehandler(this);
int counter = DB.getCount();
if (counter > 0)
{
Log.e("DB","Counter" +counter);
UnreadCount = DB.getCount();
count.setText(""+UnreadCount);
if(AnimStarted.equalsIgnoreCase("YES"))
{
image.startAnimation(anim);
AnimStarted = "NO";
}
}
但这样做会产生以下错误:
05-06 11:32:46.663: E/AndroidRuntime(24700): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:824)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.view.View.requestLayout(View.java:16431)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.widget.TextView.checkForRelayout(TextView.java:6600)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.widget.TextView.setText(TextView.java:3813)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.widget.TextView.setText(TextView.java:3671)
05-06 11:32:46.663: E/AndroidRuntime(24700): at android.widget.TextView.setText(TextView.java:3646)
05-06 11:32:46.663: E/AndroidRuntime(24700): at com.jay.te.MainScreen.updatescreen(MainScreen.java:2970)
05-06 11:32:46.663: E/AndroidRuntime(24700): at com.jay.te.MainScreen.access$31(MainScreen.java:2960)
05-06 11:32:46.663: E/AndroidRuntime(24700): at com.jay.te.MainScreen$10.run(MainScreen.java:2954)
05-06 11:32:46.663: E/AndroidRuntime(24700): at java.util.Timer$TimerImpl.run(Timer.java:284)
不确定这里的确切问题是什么?有人能帮我修一下吗
谢谢 不能从非UI线程更新UI。您有一个在后台线程上运行的计时器,您可以在
updatescreen
中更新UI
使用runOnUiThread
并更新ui,或延迟使用处理程序
runOnUiThread(new Runnable() {
@Override
public void run() {
// update ui here
}
});