Android加载网络图片android.os.NetworkOnMainThreadException异常解决方法

异常:android.os.NetworkOnMainThreadException

2012-11-21
本文转自于 J2MEN小开发者
本文地址: 异常:android.os.NetworkOnMainThreadException

Android 4.1项目:使用新浪微博分享时报:

android.os.NetworkOnMainThreadException

网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧。那么网上的朋友也给出了相应的解决方案,这叫上有政策下有对策:

一:在发起Http请求的Activity里面的onCreate函数里面添加如下代码:

  1. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
  2.         .detectDiskReads()  
  3.         .detectDiskWrites()  
  4.         .detectNetwork()   // or .detectAll() for all detectable problems  
  5.         .penaltyLog()  
  6.         .build());  
  7. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
  8.         .detectLeakedSqlLiteObjects()  
  9.         .detectLeakedClosableObjects()  
  10.         .penaltyLog()  
  11.         .penaltyDeath()  
  12.         .build());

如果正在做的项目不是Android 4.0的是看不到StrictMode类的。我也是用的网上给的com_weibo_android.jar。但是这个jar包下载下来的时候是2.3的,要先转换成Android 4.0的项目,再在分享对应的ShareActivity的onCreate()函数中添加上面的两行代码。这样就不会报这个错误了。

二:使用Thread、Runnable、Handler这三个类:

自己走了不少弯路。

另一种是启动线程执行下载任务:

    public void onCreate(Bundle savedInstanceState) {

Java代码   收藏代码
  1.       super.onCreate(savedInstanceState);  
  2.       setContentView(R.layout.main);  
  3.       // 启动线程执行下载任务  
  4.       new Thread(downloadRun).start();  
  5.   }  
  6.     
  7.   /** 
  8.    * 下载线程 
  9.    */  
  10.   Runnable downloadRun = new Runnable(){  
  11.   
  12. @Override  
  13. public void run() {  
  14.     // TODO Auto-generated method stub  
  15.     updateListView();  
  16. }  
  17.   }; 
http://geeksun.iteye.com/blog/1447708

http://www.j2men.com/index.php/archives/1849

你可能感兴趣的:(android)