图片下载器类

Posted Arcturis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片下载器类相关的知识,希望对你有一定的参考价值。

/**
 * Created by Administrator on 2017/3/24.
 * 图片异步下载类
 */

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);
    }

}

  

传入图片地址,和自己带的回调接口,采用接口回调方式返回图片Drawable

以上是关于图片下载器类的主要内容,如果未能解决你的问题,请参考以下文章

aggrid community 下载器类在 v22.0.0+ 中不可用

根据图片的url地址下载图片到本地保存代码片段

套接字编程中的Java拖放问题

片段中的Firebase数据不是持久的,会重新下载

带参数的 Python 装饰器类

16个必备的JavaScript代码片段