• 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. }  
  • 相关阅读:
    java的hashcode和equals
    Spring 注入所得
    Action注入错误
    oracle中的替换函数replace和translate函数
    CSS div水平垂直居中和div置于底部
    java double类型保留两位小数4种方法
    Delphi写的DLL回调C#
    Java基础进阶整理
    j技术方案
    SetForegroundWindow激活窗口
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/6180270.html
Copyright © 2020-2023  润新知