Android socket 编程 客户端接收的数据无法更新到UI,断开连接时才更新

移动开发 码拜 9年前 (2015-10-22) 1354次浏览
Android socket 编程 客户端接收的数据数据无法更新到UI上,只有当客户端与服务器断开连接时才能更新到UI上

public class MianActivity extends Activity {
	private TextView  textView;

	public Handler myHandler = new Handler()
	{
		public void handleMessage(Message msg) 
		{
				Bundle bundle = msg.getData();

				String str = bundle.getString("mess");
				textView.setText(str);
		};
	};
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView = (TextView) this.findViewById(R.id.text_show);
        
        startGetData();
    }
	private void startGetData()
	{
		new Thread(new Runnable()
		{
			@Override
			public void run()
			{
				Socket socket;
				try
				{
					socket = new Socket();
					socket.connect(new InetSocketAddress("192.168.191.1", 7777), 5000);  
					InputStream in = socket.getInputStream();

						byte[] buffer = new byte[200];

						String data = "";
						int length = 0;

						while(-1 !=(length = in.read(buffer,0,buffer.length)) )
						{
							data += new String(buffer,0,length);
						}


						Message msg = new Message();

						Bundle bu = new Bundle();
						bu.clear();
						bu.putString("mess", data);
						msg.setData(bu);
						myHandler.sendMessage(msg);

						in.close();
						socket.close();
				}
				catch (Exception e)
				{
					e.printStackTrace();
				}
			}
		}).start();
	}
}

请高手指点一下那里问题?

解决方案:10分
应该是没有问题的,本人一般使用消息来通知UI更新,LZ可以尝试一下。
Message msg = new Message();
msg.what = 3721;
msg.obj = str;
handler.sendMessage(msg);
解决方案:10分
首先myHandler 有没有接收到信息,其次是不是要用异步
解决方案:20分
                        while(-1 !=(length = in.read(buffer,0,buffer.length)) )
{
data += new String(buffer,0,length);
}
这地方是不是阻塞了?你说要断开服务器才能更新到UI,本人估计是你的服务器发送的数据没有close?
另外就是可以在服务器端发送数据的时候 添加结束标示符 例如0xFF或 特殊符号 ,客户端判断结束符 可以跳出循环就OK了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android socket 编程 客户端接收的数据无法更新到UI,断开连接时才更新
喜欢 (0)
[1034331897@qq.com]
分享 (0)