真切感受到了,主线程不能尝试网络连接的意思。我一个类,类的构造函数里面我准备初始化socket,然后主Activity点击按钮,例化类,调试到例化类,直接跑飞了,都不能定位在哪一行了。。。然后就显示不好意思,我得退出了。
当然这个问题现在解决了,把socket建立放到了类的线程里面,但是现在退出好像有点问题,应该是没有正常退出线程吧。
先看解决办法,好吧,使用状态位,想想,C++的线程,好像也是这么处理的。
关闭还是关闭不了,好像阻塞了,先解决接受不了信息这个问题。查出来是,我在第二个java里需要访问Activity的资源,我用的是 ((EditText)activity.findViewById(R.id.Tmp_view)).setText(s);强行来,貌似报错了。然后我就传递个TextEdit,也不让我用text_view.setText(s);蛋疼
问题越来越神奇了,现在我传递MainActivity,然后呢,调用他的函数来设置EditText,也进去了报错了,我真是
现在改成再不行,我真的报警了
为啥呢,还是不行,走到中间这句话就不行了,放到同一个类下也不行
终于tn的好了,先总结如下。确定问题的一般步骤是,利用debug模式,去调试pad,然后比如出现了异常,logcat里面会显示错误,像我这:为啥没错误呢,因为错误的时候没截图,哈哈哈。。就这个意思
然后知道错误了,去百度这个错误,确定是子线程不能去修改主线程的UI(所以,我接收到数据后,调用显示函数,就是子线程想改ui)。知道问题后,百度起来就顺利多了
利用handler,来解决这个问题,直接贴代码了:
主线程端:
就是这样子,前面private Handler什么的就不截图了
子线程端:
忽略内容,我是把MainActivity传过来的,不知道好不好,应该是不好,因为这样,我还是会手贱的利用这个干吗干吗,不安全不是么,试试传handler吧
也是行的,好吧啦,传handler好了。
稍微加加注释,解决下一个问题吧。