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. }  
  • 相关阅读:
    修改VS中的附加依赖项的继承值
    cocos2dx的addChild接口设计
    svn cleanup失败解决方法
    vi显示中文乱码
    CentOS 7.4 shell 不显示当前用户和路径的问题
    生产工具的差距导致的生产力(生产效率)的差距
    GPU的历史:从固定管线到可编程管线再到通用计算平台
    聊Java中的任务调度的实现方法及比较
    Spring Boot 揭秘与实战之RabbitMQ
    一个让Java事半功倍的反射库
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/6180270.html
Copyright © 2011-2022 走看看