Volley提供2个静态方法:

public static RequestQueue newRequestQueue(Context context) {}

public static RequestQueue newRequestQueue(Context context, HttpStack stack) {} 
第一个直接调用第二个的newRequestQueue(context, null);方法,返回都是一个RequestQueue 对象
以ImageLoader为例 构造方法
 
public ImageLoader(RequestQueue queue, ImageCache imageCache) {
mRequestQueue = queue;
mCache = imageCache;
}
 
需要一个RequestQueue 对象 和一个ImageCache对象 ,RequestQueue 可以通过Volley类中的静态方法newRequestQueue(Context context) 获得,而ImageCache 则是一个interface
 public interface ImageCache {
public Bitmap getBitmap(String url);
public void putBitmap(String url, Bitmap bitmap);
}
实现此接口,即上一文章中Cache包下的BitmapCache,赋值给mCache对象
mCache中缓存key value,key规则为String key = "#W"+maxWidth+"#H"+ maxHeight +url;
再来看下面方法
参数:defaultImageResId:未开始下载显示的图片Id,如果传递0则不显示任何东西
           errorImageResId:下载显示的图片Id,如果传递0则不显示任何东西
返回值:ImageListener
 
public static ImageListener getImageListener(final ImageView view,
final int defaultImageResId, final int errorImageResId) {
...
...//直接new一个ImageListener
@Override public void onResponse(ImageContainer response, boolean isImmediate)
{ if (response.getBitmap() != null)
{ //response有值设置ImageView显示图片
view.setImageBitmap(response.getBitmap()); } else if (defaultImageResId != ) { view.setImageResource(defaultImageResId); } } }
response.getBitmap()中的bitmap是通过BatchedImageRequest中的batchResponse(),
通过一个ImageContainer类中的Interface:ImageListerner.onResponse回调回来的
 
private void batchResponse(String cacheKey, BatchedImageRequest request,
final VolleyError error) {
mBatchedResponses.put(cacheKey, request);
// If we don't already have a batch delivery runnable in flight, make a new one.
// Note that this will be used to deliver responses to all callers in mBatchedResponses.
if (mRunnable == null) {
mRunnable = new Runnable() {
@Override
public void run() {
for (BatchedImageRequest bir : mBatchedResponses.values()) {
for (ImageContainer container : bir.mContainers) {
if (container.mListener == null) {
continue;
}
if (error == null) {
//取得数据
container.mBitmap = bir.mResponseBitmap;
//通过ImageContainer中的mListener,即ImageListener中的onResponse()方法回调
container.mListener.onResponse(container, false);
} else {
container.mListener.onErrorResponse(error);
}
}
}
mBatchedResponses.clear();
mRunnable = null;
} };
// Post the runnable.
mHandler.postDelayed(mRunnable, mBatchResponseDelayMs);
}
}

最新文章

  1. [OC笔记]@property之个人理解,大神轻拍
  2. autorelease的对象何时被释放
  3. 简单的百度贴吧爬虫实现(urllib)
  4. JAVA嵌套循环
  5. iOS 协同开发出fatal error: file ‘XX-Prefix.pch’ has been modified since the precompiled header was built
  6. Nginx开启gzip压缩功能
  7. 【转】如何下载并编译Android4.0内核源码goldfish(图文)
  8. 关于python的面向对象编程
  9. Week12(11月25日)
  10. 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
  11. 移动玩具[HAOI2008]
  12. 团队作业8——Beta 阶段冲刺6th day
  13. mysql入门知识
  14. JS创建对象之稳妥构造函数模式
  15. CPU高速缓存
  16. css之absolute
  17. GM Bosch Vetronix HP Tech 2 with CANDI
  18. Java.util.properties读取配置文件分析
  19. Java代理机制之初见(理解及实现)
  20. Python3+smtplib+poplib+imaplib实现发送和收取邮件(以qq邮箱为例)

热门文章

  1. org.apache.spark.logging类报错
  2. SpringBoot操作ES进行各种高级查询
  3. JAVA-SpringMVC 概述及组件介绍
  4. word2vec原理分析
  5. javaScript基础-02 javascript表达式和运算符
  6. 什么时候使用redis?什么时候使用memcache?
  7. 常用linux的命令
  8. Spring Cloud Gateway 服务网关快速上手
  9. 【RabbitMQ】如何进行消息可靠投递【上篇】
  10. NOIP前的模板复习和注意事项