URL转Drawable之 Android中获取网络图片的三种方法

【URL转Drawable之 Android中获取网络图片的三种方法】赋料扬雄敌,诗看子建亲。这篇文章主要讲述URL转Drawable之 Android中获取网络图片的三种方法相关的知识,希望能为你提供帮助。
转载自:  http://doinone.iteye.com/blog/1074283


Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况。对于这种情况,一般的方法就是耗时操作用线程来实现。下面列三种获取url图片的方法: 
1.直接获取:(容易:ANR,不建议) 


[java]  view plain  copy

  1. mImageView  =  (ImageView)this.findViewById(R.id.imageThreadConcept)  ;    
  2. Drawable  drawable  =  loadImageFromNetwork(IMAGE_URL);    
  3. mImageView.setImageDrawable(drawable)  ;    

公用方法: 


[java]  view plain  copy
  1. private  Drawable  loadImageFromNetwork(String  imageUrl)   
  2. {   
  3.         Drawable  drawable  =  null;    
  4.         try  {   
  5.                 //  可以在这里通过文件名来判断,是否本地有此图片   
  6.                 drawable  =  Drawable.createFromStream(   
  7.                                 new  URL(imageUrl).openStream(),  "image.jpg");    
  8.         }  catch  (IOException  e)  {   
  9.                 Log.d("test",  e.getMessage());    
  10.         }   
  11.         if  (drawable  ==  null)  {   
  12.                 Log.d("test",  "null  drawable");    
  13.         }  else  {   
  14.                 Log.d("test",  "not  null  drawable");    
  15.         }   
  16.            
  17.         return  drawable  ;    
  18. }   
2. 后台线程获取url图片: 
[java]  view plain  copy
  1. mImageView  =  (ImageView)this.findViewById(R.id.imageThreadConcept)  ;    
  2. new  Thread(new  Runnable(){   
  3.         Drawable  drawable  =  loadImageFromNetwork(IMAGE_URL);    
  4.         @Override   
  5.         public  void  run()  {   
  6.                    
  7.                 //  post()  特别关键,就是到UI主线程去更新图片                                   
  8.                 mImageView.post(new  Runnable(){   
  9.                 @Override   
  10.                 public  void  run()  {   
  11.                         //  TODO  Auto-generated  method  stub   
  12.                         mImageView.setImageDrawable(drawable)  ;    
  13.                 }})  ;    
  14.                 }   
  15.                    
  16. }).start()    ;    



3.AsyncTask获取url图片 


[java]  view plain  copy
  1. mImageView  =  (ImageView)this.findViewById(R.id.imageThreadConcept)  ;    
  2. new  DownloadImageTask().execute(IMAGE_URL)  ;    
  3. private  class  DownloadImageTask  extends  AsyncTask< String,  Void,  Drawable>      
  4. {   
  5.                    
  6.                 protected  Drawable  doInBackground(String...  urls)  {   
  7.                         return  loadImageFromNetwork(urls[0]);    
  8.                 }   
  9.    
  10.                 protected  void  onPostExecute(Drawable  result)  {   
  11.                         mImageView.setImageDrawable(result);    
  12.                 }   
  13. }   










    推荐阅读