【NetworkOnMainThreadException】关于主线程不能访问网络异常NetworkOnMainThreadException

最近在弄访问网络的时候,遇到一个问题。
同一个项目,在android2.3手机上没有任何问题,但是在android4.0平板上却出现访问网络异常。
android.os.NetworkOnMainThreadException
             at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
             at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
             ......
后来仔细查了一下,终于发现解决方法了,特此拿出来供大家参考参考。
android.os.NetworkOnMainThreadException是说不要在主线程中访问网络,这个应该是android3.0版本开始就强制不能在主线程中访问网络,要把访问网络放在独立的线程中。在开发中,为了防止访问网络阻塞主线程,一般都要把访问网络放在独立线程中或者异步线程AsyncTask中 。但是由于某些原因,想要忽略这些强制策略问题的话,可以在onCreate()方法里面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
就可以解决你的问题。另外在类的前面,可能要加上@SuppressLint("NewApi")才行。
在android sdk 2.3以上才有StrictMode类,我在android sdk 2.3.3上编译测试通过。
注:Android 2.3起,新增加了一个新的类,叫StrictMode(android.os.StrictMode), 这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题,比如可以监视那些本不应该在主线程中完成的工作或者其他的一些不规范和不好的代码。
在android sdk 4.0版本上,这个问题可能比较常见,呵呵。

你可能感兴趣的:(Exceptions,android备忘录,安卓开发进阶,Android开发异常整理)