android.os.NetworkOnMainThreadException 小灰灰 2021-03-26 15:17 461阅读 0赞 在4.0之后谷歌强制要求链接网络不能在主线程进行访问,所在主线程运行就会出现这个错误 ![1019268-20171014151544074-1388024398.png][] 解决错误必须要创建一个子线程 new Thread(){ public void method1(){ //放入你要链接网络的数据 }}.start(); 有了这句话之后,上面那个错误解决了,但是又有新的错误 ![1019268-20171014161628746-1572379914.png][] 因为只有主线程(UI线程)才可以跟新UI(如果不这样,就会造成线程的同步与互斥的某些复杂情况。。。)∴如果在子线程中更新UI会出现错误 解决方法 :信息机制(handler原理) 1:在主线程中定义一个Handler //主线程中定义一个handler ,类声明一个之后又加一个大括号{}表示重写这个类的方法 private Handler handler=new Handler(){ //这个方法是在主线程里面执行的 @Override public void handleMessage(Message msg) { //更新你需要的UI String content= (String) msg.obj;//获取信息 tv.setText(content);//跟新UI } }; 2:子线程里面 //调用handler的对象告诉系统我们要跟新UI //1:创建一个message对象 Message msg=new Message(); msg.obj=content;// String content=StreamTools.tooleadStream(inputStream); handler.sendMessage(msg); //发送一条消息 信息把数据发到msg里面 ,发送完信息之后,主线程定义的handler就立马执行handleMessage()方法 [1019268-20171014151544074-1388024398.png]: /images/20210326/1616771789666.png [1019268-20171014161628746-1572379914.png]: /images/20210326/1616771770922.png
还没有评论,来说两句吧...