今天遇到这个异常:
 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();    
            }       
       });

解决方案 »

  1.   

    在run方法里通过Handler sendMessage 然后在handMessage中 refresh ui 
      

  2.   

    不好意思,我水平比较菜,没有用过Handler sendMessage可否说的具体点,或者给个小例子
      

  3.   


    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);
    }}
      

  4.   

    问题解决啦,下面是解决方法,供大家参考: 
    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();