我正在为Android开发一个P2P聊天/共享应用程序。以下代码用于接收UDP数据包,但仅接收并显示第一个消息/数据包。 (发送代码没有问题。)不显示后续聊天消息。 while循环似乎在chathistory.setText之后退出(执行新的String ....例如:chathistory.setText(“test”);未执行。任何人都可以指出错误吗?没有异常抛出。
public void receive() throws Exception
{
(new Thread(new Runnable() {
@Override
public void run() {
try
{
ds1=new DatagramSocket(7777);
//chathistory.setText("Holding the port...");
while(true)
{
DatagramPacket p = new DatagramPacket(buffer, buffer.length);
ds1.receive(p);
chathistory.setText(new String(p.getData(), 0, p.getLength()));
chathistory.setText("test");
}
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} })).start();
}
答案 0 :(得分:0)
其一,Androids UI调用都不是线程安全的,并且由于您的进程主线程专门用于更新UI,因此您不应该从任何其他线程操作Android中的UI元素,而是运行您的活动。
二,你可能会抛出异常,因为logcat无法从另一个线程打印。
三,我很好奇,如果这段代码曾试图逼近你,我问,因为我很好奇,如果.receive在很长一段时间内被阻止,android会怎么做,你可能应该使用超时。