今天遇到这个异常:
Only the original thread that created a view hierarchy can touch its views.
网上查了下,用下面的方法来解决:
ChatActivity .this.runOnUiThread(new Runnable() {
@Override
public void run() {
// refresh ui 的操作代码
}
}); 问题来了:我的原来的线程为:new ClientThread().start(); 那么上面的一段代码要放在什么地方才对呢?我试了下面一种方法是不对的!
ChatActivity .this.runOnUiThread(new Runnable() {
@Override
public void run() {
new ClientThread().start();
}
});
Only the original thread that created a view hierarchy can touch its views.
网上查了下,用下面的方法来解决:
ChatActivity .this.runOnUiThread(new Runnable() {
@Override
public void run() {
// refresh ui 的操作代码
}
}); 问题来了:我的原来的线程为:new ClientThread().start(); 那么上面的一段代码要放在什么地方才对呢?我试了下面一种方法是不对的!
ChatActivity .this.runOnUiThread(new Runnable() {
@Override
public void run() {
new ClientThread().start();
}
});
public class MainActivity extends Activity implements Runnable{ private TextView tv; private Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
tv.setText("Done");
break;
default:
tv.setText("Done in default");
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
new Thread(this).start(); }
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myHandler.sendEmptyMessage(1);
}}
new Thread(new Runnable(){
@Override
public void run() {
try {
while (ClientDataBuffer.clientSocket.isConnected()) {
final Response response = (Response) ClientDataBuffer.ois.readObject();
final ResponseType type = response.getType();
System.out.println("获取了响应内容:" + type);
ChatActivity.this.runOnUiThread(new Runnable(){
@Override
public void run() {
if (type == ResponseType.LOGIN) {
String newUser = response.getData("name");
System.out.println("【系统消息】用户"+newUser + "上线了!\n");
ClientUtil.appendTxt2MsgListArea("【系统消息】用户"+newUser + "上线了!\n");
}else if(type == ResponseType.LOGOUT){
String newUser = response.getData("name");
System.out.println("【系统消息】用户"+newUser + "下线了!\n");
ClientUtil.appendTxt2MsgListArea("【系统消息】用户"+newUser + "下线了!\n");
}else if(type == ResponseType.CHAT){ //聊天
Message msg = response.getData1("txtMsg");
System.out.println(msg.getFromUser()+"说:"+msg.getMessage());
ClientUtil.appendTxt2MsgListArea(msg.getMessage());
}
}
});
}
}catch (IOException e) {e.printStackTrace();}
catch (ClassNotFoundException e) {e.printStackTrace();}
}
}).start();