znl_12 2013-09-23 08:13 采纳率: 0%
浏览 1929

客户端服务器请求程序时的线程错误

我想给daytime创建一个客户端请求程序,例如客户写入一个服务器地址,服务器响应,客户端的写入返回。但是获取的是:"Only the original thread that created a view hierarchy can touch its views." 我在按钮的监听器事件中创建了一个新的线程。
代码如下:

static Socket socket;
TextView result;
EditText server;
Button connect;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    result = (TextView)findViewById(R.id.result);
    server =(EditText)findViewById(R.id.serverField);
    result.setMovementMethod(new ScrollingMovementMethod());
    connect = (Button)this.findViewById(R.id.enter);
    connect.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            new Thread(new Runnable(){
                public void run(){
                    socket = null;
                    String timestamp;
                    try{
                        socket = new Socket(server.getText().toString(), Server_Port);
                        InputStream input = socket.getInputStream();
                        BufferedReader socket_input = new BufferedReader(new InputStreamReader(input));
                        result.setText(result.getText()+"Connected to: "+socket.getInetAddress()+" on port "+socket.getPort());
                        while(true){
                            timestamp = socket_input.readLine();
                            if(timestamp == null){
                                result.setText(result.getText()+"\n"+"Server closed connection");
                                break;
                            }
                            result.setText(result.getText()+"\nDaytime: "+timestamp);
                        }
                    }
                    catch(IOException error){
                        result.setText(""+error);
                    }
                    finally{
                        try{
                            if(socket != null){
                                socket.close();
                            }
                        }
                        catch(IOException error){
                            result.setText(""+error);
                        }
                    }
                }
            }).start();
        }
    });
    }

那么如何修复线程问题?

  • 写回答

2条回答

  • biaoguo819 2013-09-23 14:20
    关注

    不能在线程中直接对result操作

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献