六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 120|回复: 0

关于android.os.NetworkOnMainThreadException的问题

[复制链接]

升级  51.33%

33

主题

33

主题

33

主题

秀才

Rank: 2

积分
127
 楼主| 发表于 2013-1-30 04:03:07 | 显示全部楼层 |阅读模式
由于有个小需求,需要通过http去获取网络信息,没用HttpClient相对来说比较重的东西,直接用的java.net.URLConnection。
        String re = "";        URL ul = new URL(url);        URLConnection connection = ul.openConnection();        BufferedReader in = new BufferedReader(new InputStreamReader(                connection.getInputStream()));        String inputLine;        while ((inputLine = in.readLine()) != null) // System.out.println(inputLine);        {            re += inputLine;        }        in.close();        return re;
在Android2.2+上用,没神马问题。
放在Android3.2+上做测试的时候,就比较纠结了,系统反馈了个异常android.os.NetworkOnMainThreadException

其实这个异常顾名思义,就是不要在主线程上做网络请求,以防止UI卡死。

具体解决也还好说,启一个AsyncTask就是了
class RetreiveWifiTask extends AsyncTask<String, Void, WlanBean> {private WlanUtil wlanUtil = null;// 工具类@Overrideprotected WlanBean doInBackground(String... urls) {// 登录WlanBean bean = null;//TODO调用网络请求工具类return bean;}@Overrideprotected void onPostExecute(WlanBean bean) {//TODO当网络信息处理完成以后调用Toast.makeText(MainActivity.this, bean.getMessage(),Toast.LENGTH_SHORT).show();}}}

然后在主线程或者handler里面调用
new RetreiveWifiTask().execute(url,type);//参数个数不固定,就是String数组,根据自己的业务来处理

AsyncTask的是使用我就不说了,这个官方文档或者很多高手都介绍过了
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表