xuliduo 发表于 2013-1-30 04:03:07

关于android.os.NetworkOnMainThreadException的问题

由于有个小需求,需要通过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的是使用我就不说了,这个官方文档或者很多高手都介绍过了
页: [1]
查看完整版本: 关于android.os.NetworkOnMainThreadException的问题