【发布时间】:2014-03-02 20:13:06
【问题描述】:
就像标题一样,我有一个带有 MainActivity 类的 android 项目,该类有一个 TextView,我想在收到消息后设置它的文本。我还有一个在单独线程上运行 ServerSocket 的类,该线程接收我要显示的字符串消息。
我的 MainActivity 的一部分看起来像这样,
private Handler UIHandler = new Handler();
private RemoteControlServer remoteConnection;
public static final int controlPort = 9090;
public class MainActivity extends Activity implements SensorEventListener
{
...
remoteConnection = new RemoteControlServer(controlPort, UIHandler);
...
private class RemoteControlServer extends RemoteControl
{
RemoteControlServer(int port, Handler ui)
{
super(port, ui);
}
@Override
public void onReceive(String[] msg)
{
//updates messages textview
}
@Override
public void onNotify(String[] msg)
{
//updates notification textview
}
}
}
调用 onReceive(String[] msg) 并处理在不同线程上接收消息的代码的 RemoteControlServer 实现如下所示,
...
public abstract void onReceive(String[] msg);
public abstract void onNotify(String[] msg);
...
controlListener = new Thread(new Runnable()
{
boolean running = true;
public void run()
{
String line = null;
while(running)
{
try
{
//Handle incoming messages
...
onReceive(messages);
}
catch (final Exception e)
{
UIHandler.post(new Runnable()
{
public void run()
{
onNotify("Wifi Receive Failed " + e.toString() + "\n");
}
});
}
}
}
});
...
我收到错误消息“只有创建视图层次结构的原始线程才能接触其视图。”当 onReceive() 被调用并抛出异常并使用异常描述调用 onNotify() 时。为什么 onNotify() 有效,而另一个无效?如何正确调用 TextView 的侦听器并更新其文本?谢谢
【问题讨论】:
标签: java android multithreading