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