Android笔记(二):网络图片加载器
来源:互联网 发布:第一网红 知乎 编辑:程序博客网 时间:2024/06/05 19:50
可以根据url地址来加载图片,并缓存。
public class AsyncImageLoader { final Handler handler = new Handler(Looper.getMainLooper()); private HashMap<String, SoftReference<Drawable>> imageCache; String title; //图片对应的标题 public AsyncImageLoader() { imageCache = new HashMap<>();//图片缓存 } // 回调函数 public interface ImageCallback { void onImageLoad(Integer t, String title, Drawable drawable); void onError(Integer t); } public void loadDrawable(final Integer pos, final String imageUrl, String title, final ImageCallback imageCallback) { this.title = title; new Thread() { @Override public void run() { LoadImg(pos, imageUrl, imageCallback); } }.start(); } public void LoadImg(final Integer pos, final String imageUrl, final ImageCallback imageCallback) { // 首先判断是否在缓存中 // 但有个问题是:ImageCache可能会越来越大,以至用户内存用光,所以要用SoftReference(弱引用)来实现 if (imageCache.containsKey(imageUrl)) { SoftReference<Drawable> softReference = imageCache.get(imageUrl); final Drawable drawable = softReference.get(); if (drawable != null) { handler.post(new Runnable() { @Override public void run() { imageCallback.onImageLoad(pos, title, drawable); } }); return; } } // 尝试从URL中加载 try { final Drawable drawable = loadImageFromUrl(imageUrl); if (drawable != null) { imageCache.put(imageUrl, new SoftReference<>(drawable)); } handler.post(new Runnable() { @Override public void run() { imageCallback.onImageLoad(pos, title, drawable); } }); } catch (IOException e) { handler.post(new Runnable() { @Override public void run() { imageCallback.onError(pos); } }); e.printStackTrace(); } } // 根据URL加载图片,如果出现错误throws IOException式的错误,以便在LoadImg中捕获,执行OnError()函数 public static Drawable loadImageFromUrl(String url) throws IOException { URL m; InputStream i; m = new URL(url); i = (InputStream) m.getContent(); Drawable d = Drawable.createFromStream(i, "src"); return d; }}
使用:
new AsyncImageLoader().loadDrawable(i, url,title, new AsyncImageLoader.ImageCallback() { @Override public synchronized void onImageLoad(Integer t,String title,Drawable drawable) { images.add(drawable); titles.add(title); adapter.notifyDataSetChanged(); } @Override public void onError(Integer t) { Toast.makeText(MainActivity.this,"图片加载失败",Toast.LENGTH_SHORT).show(); } });
阅读全文
0 0
- Android笔记(二):网络图片加载器
- Android异步加载学习笔记之二:实现ListView中的图片数据从网络加载
- Android--Volley(二)--加载网络图片
- Android学习笔记之网络图片加载
- Volley学习笔记(二):使用Volley加载网络图片
- android加载网络图片
- Android加载网络图片
- android加载网络图片
- android 网络加载图片
- android加载网络图片
- Android加载网络图片
- Android加载网络图片
- Android加载网络图片
- android加载网络图片
- Android网络加载图片
- Android Volley完全解析(二),使用Volley加载网络图片
- Android Volley完全解析(二),使用Volley加载网络图片
- Android Volley完全解析(二),使用Volley加载网络图片
- 解决Microsoft Teredo Tunneling Adapter >>>這個裝置無法啟動。 (代碼 10)
- 搭建大型源码阅读环境——使用 OpenGrok 搭建大型源码阅读环境——使用 OpenGrok
- 数据库SQL语句练习题
- 设计模式--观察者模式初探和java Observable模式
- 不值一提的计算机基础教程-1-文件
- Android笔记(二):网络图片加载器
- Java23中设计模式之”装饰者模式”
- 双11黑科技,阿里百万级服务器自动化运维系统StarAgent揭秘
- php自动生成数据字典
- 在ASP.NET中的JQuery FullCalendar实现
- ARM的体系结构变种
- 关于Spring的<context:annotation-config/>配置详解
- 1.基本按钮样式
- spring boot 事物管理