我正在构建一个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会允许它更新,但它没有做任何事情。
答案 0 :(得分:1)
UserInterface只能由UI线程更新。你需要一个Handler来发布到UI线程:
答案 1 :(得分:0)
事实证明,我发布的这段代码确实有效。 关键部分是:
`strDisplay.post(new Runnable()
{
public void run()
{
//Updating TextView "strDisplay" with the latest server data
strDisplay.setText(serverInput);
}
});`
我的程序中可能有另一个错误,但这是我现在所拥有的并且它的工作非常好:-)我希望这可以帮助某人!