public void onClick(View v) {
// TODO Auto-generated method stub
Thread thread = new Thread(MainActivity.this);
thread.setPriority(Thread.MAX_PRIORITY);
thread.start(); System.out.println("onlick:" + line);
text.setText("来自服务器的数据:" + line);
}
以上代码是一个Button的onClick事件。
线程里设置了一个socket接收信息,得到的数据保存在全局变量line里。line初始设置为null。
text是TextView对话框。
问题是:当我点击这个按钮后,发现text里显示的是null。而且logcat里System.out.println("onlick:" + line);输出的也是null,之后才显示thread里的system.out,输出的line却是我从服务器得到的值。
怎么解决这个问题?是因为线程抢资源的原因吗?线程socketandroid

解决方案 »

  1.   

    你应该在线程收到数据之后在设置text的值,而不是在onclick函数中直接设置,因为此时数据还没有收到的
      

  2.   

    在子线程中收到数据之后,使用handler发消息到主线更新textview的值
      

  3.   

    好像直接在线程里设置text值是报错的,这个我试过了。
      

  4.   

    用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊
      

  5.   

    用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊
    这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值
      

  6.   

    用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊
    这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值那怎样解决呢,给个思路。。
      

  7.   

    用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊
    这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值那怎样解决呢,给个思路。。
    也放handler里面啊
      

  8.   

    用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊
    这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值那怎样解决呢,给个思路。。
    也放handler里面啊果然是这样啊。。刚刚我也是这样做的。。但是总感觉handle是为了更新ui来用的有没有别的方法?handler是不是就是线程间通信用的?我刚学android不久,不太懂
      

  9.   

    用了handler之后确实text显示正确了。但是,System.out.println("onlick:" + line);输出的还是null,这是哪里的问题?谢谢你啊
    这个是因为你调用start后紧根着就会打印line,但这时可能line还没有值那怎样解决呢,给个思路。。
    也放handler里面啊果然是这样啊。。刚刚我也是这样做的。。但是总感觉handle是为了更新ui来用的有没有别的方法?handler是不是就是线程间通信用的?我刚学android不久,不太懂
    别误解了,这里的handler只不过放在线程里面去做的.不用handler也可以.你需要有个同步机制等线程里面执行完了在System.out.println("onlick:" + line);
    同步的话一般用wait-->notify