Android 创建视图层次结构的原始线程可以接触其视图

Android 创建视图层次结构的原始线程可以接触其视图,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(

如果DB中的特定计数大于0,我将尝试启动动画,并尝试将计数值设置为textView。我有一个计时器来检查每一秒钟的表计数是否大于0

在Oncreate中调用timeMethod

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
                        }
                 });