zoukankan      html  css  js  c++  java
  • Android基础篇异步获取网络图片

    很多时候,我们从网络上获取到的图片只是一个Url地址。

    我们必须采用异步加载的方法,将图片显示才来。

    public class AsyncImageLoader {
    
         private HashMap<String, SoftReference<Drawable>> imageCache;
          
             public AsyncImageLoader() {
                 imageCache = new HashMap<String, SoftReference<Drawable>>();
             }
          
             public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) {
                 if (imageCache.containsKey(imageUrl)) {
                     SoftReference<Drawable> softReference = imageCache.get(imageUrl);
                     Drawable drawable = softReference.get();
                     if (drawable != null) {
                         return drawable;
                     }
                 }
                 final Handler handler = new Handler() {
                     public void handleMessage(Message message) {
                         imageCallback.imageLoaded((Drawable) message.obj, imageUrl);
                     }
                 };
                 new Thread() {
                     @Override
                     public void run() {
                         Drawable drawable = loadImageFromUrl(imageUrl);
                         imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
                         Message message = handler.obtainMessage(0, drawable);
                         handler.sendMessage(message);
                     }
                 }.start();
                 return null;
             }
          
            public static Drawable loadImageFromUrl(String url) {
                URL m;
                InputStream i = null;
                try {
                    m = new URL(url);
                    i = (InputStream) m.getContent();
                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Drawable d = Drawable.createFromStream(i, "src");
                return d;
            }
          
             public interface ImageCallback {
                 public void imageLoaded(Drawable imageDrawable, String imageUrl);
             }
    
    }

    当我们需要使用的时候

            viewHolder.mWeiboPhoto.setTag(mFriendBeans.get(position).getPhoto());
            Drawable cachedImage = asyncImage.loadDrawable(mFriendBeans.get(position).getPhoto(), new ImageCallback() {
                public void imageLoaded(Drawable imageDrawable, String imageUrl) {
                    ImageView imageViewByTag = (ImageView) mListView.findViewWithTag(imageUrl);
                    if (imageViewByTag != null) {
                        imageViewByTag.setImageDrawable(imageDrawable);
                    }
                }
            });
            if (cachedImage == null) {
                Log.info("json", "json is null");
                viewHolder.mWeiboPhoto.setImageResource(R.drawable.sinaweibo);
            }else{
                Log.info("json", "json is not null");
                viewHolder.mWeiboPhoto.setImageDrawable(cachedImage);//图标
            }
  • 相关阅读:
    Study Plan The TwentySecond Day
    Study Plan The Nineteenth Day
    Study Plan The TwentySeventh Day
    Study Plan The Twentieth Day
    Study Plan The TwentyFirst Day
    python实现进程的三种方式及其区别
    yum makecache
    JSONPath 表达式的使用
    oracle执行cmd的实现方法
    php daodb插入、更新与删除数据
  • 原文地址:https://www.cnblogs.com/gongcb/p/2601565.html
Copyright © 2011-2022 走看看