如何监听来自线程套接字的传入消息以更新android中的Listview?

时间:2015-04-04 17:18:02

标签: android sockets client server

我正在开发一个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;
 }


}

1 个答案:

答案 0 :(得分:0)

我认为以下任何一种情况都可能发生这种情况。 1.设置适应的列表 2.检查客户端是否收到数据并添加到数据源。 3.将数据添加到ListView的数据源后调用notifyDataSetChanged()。