关于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]