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 为什么eprime输出的数据会有缺失?
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题