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 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?