今天,在做两个android设备之间cs通信时。发现客户端加入下列代码后,服务器接收缓存区会出现NullPointerExection,进而程序崩溃。
if( strs[0].equalsIgnoreCase("key")) {
String command = strs[1];
textView.setText("ok");
Log.e(TAG, "new sendKeyEvent keyCode:"+command);
}
这段代码,也只是判断了一下接收到的消息,然后在界面显示一下。刚开始以为是通信的问题,后来发现代码中textView.setText("OK")是在子线程中更新了UI。造成客户端进程被杀掉,进而服务器也出现了莫名其妙的问题。
更改方法:在主线程里更改UI
public Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
textView.setText("ok");
break;
default:
break;
}
}
};
子线程
if( strs[0].equalsIgnoreCase("key")) {
String command = strs[1];
mHandler.sendEmptyMessage(0);
Log.e(TAG, "new sendKeyEvent keyCode:"+command);
}
通过Handler传递给主线程。