setText不在Runnable中更新

时间:2015-07-22 19:11:53

标签: java android multithreading textview runnable

我正在构建一个Android应用程序。应用程序从服务器提取数据,并应使用该数据更新TextView。这是我的流程代码,遗漏了不必要的细节:

public class MainActivity 
{

从OnCreate类启动Runnable:

    protected void OnCreate(...)
    {
    ...
    Thread connect = new Thread(runnable);
    connect.start();
    }

Runnable类的代码:

    Runnable runnable = new Runnable()
    {
        public void run()
        {
        ...(setting up server input stuff)
        final TextView strDisplay = (TextView)findViewById(R.id.stringDisplay);
            while (!Thread.currentThread ().isInterrupted())
            {
                try
                {
                    final String serverInput = subscriber.recvStr(); //receiving server input
                    strDisplay.post(new Runnable()
                    {
                        public void run()
                        {
                            //Updating TextView "strDisplay" with the latest server data
                            strDisplay.setText(serverInput);
                        }
                     });
                 }
                 catch...
             }
         }
     };
}

然而,当我运行它时,只有它接收的第一个服务器输入显示在TextView中,然后虽然有更多输入进入(它是,我用Log检查),TextView不会更新。在控制台中,我在打印第一个输入后读取“onFinishInput”,然后在控制台上启动输入流。我认为启动一个新的Runnable会允许它更新,但它没有做任何事情。

2 个答案:

答案 0 :(得分:1)

UserInterface只能由UI线程更新。你需要一个Handler来发布到UI线程:

Android update TextView in Thread and Runnable

答案 1 :(得分:0)

事实证明,我发布的这段代码确实有效。 关键部分是:

`strDisplay.post(new Runnable()
{
    public void run()
    {
        //Updating TextView "strDisplay" with the latest server data
        strDisplay.setText(serverInput);
    }
});`

我的程序中可能有另一个错误,但这是我现在所拥有的并且它的工作非常好:-)我希望这可以帮助某人!