我正在开发一个Android应用程序,我必须在其中创建一个服务器的多个客户端连接。在服务器端,我正在为每个客户端创建一个新线程,它工作正常,但在新创建的线程中,我正在侦听来自套接字的消息并更新在片段中创建的列表视图,它没有得到更新。请帮我解决这个问题。
public class ClientSocketHandler extends Thread {
private static final String TAG = "ClientSocketHandler";
//private Handler handler;
// private ChatManager chat;
private InetAddress mAddress;
InputStream dataInputStream=null;
OutputStream dataOutputStream=null;
static String msgToSend="";
int i;
char c;
String newMsg="";
Boolean flag=true;
WiFiChatFragment frg;
Handler handler;
public ClientSocketHandler(InetAddress groupOwnerAddress) {
this.mAddress = groupOwnerAddress;
//this.handler=handl;
}
@Override
public void run() {
Socket socket = new Socket();
try {
socket.bind(null);
socket.connect(new InetSocketAddress(mAddress.getHostAddress(),
WiFiServiceDiscoveryActivity.SERVER_PORT), 5000);
Log.d(TAG, "Launching the I/O handler");
dataInputStream = socket.getInputStream();
dataOutputStream = socket.getOutputStream();
while (true) {
while(flag){
if((i=dataInputStream.read())!=1){
frg.pushMessage(newMsg);
newMsg="";
flag=false;
}
else{
c=(char)i;
newMsg+=c;}
}
if(!msgToSend.equals("")){
dataOutputStream.write(msgToSend.getBytes());
dataOutputStream.flush();
msgToSend = "";
}
}
} catch (IOException e) {
e.printStackTrace();
try {
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
return;
}
}
public static void sendMsg(String msg){
msgToSend = msg;
}
}
答案 0 :(得分:0)
我认为以下任何一种情况都可能发生这种情况。 1.设置适应的列表 2.检查客户端是否收到数据并添加到数据源。 3.将数据添加到ListView的数据源后调用notifyDataSetChanged()。