zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    十步完全理解SQL
    c#退出应用程序办法
    几个有意思的算法题
    GeoServer不同服务器安装配置、数据发布及客户端访问
    开启httpd服务的时候 显示Could not reliably determine the server`s fully qualified domain name
    Working With OpenLayers(Section 1: Creating a Basic Map)
    GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
    模拟远程HTTP的POST请求
    模拟提交带附件的表单
    支付宝手机网站接口对接
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/6180270.html
Copyright © 2011-2022 走看看