使用Volley的ImageLoader下载图片时, onResponse会调用两次, 第一次Bitmap是空, 设置默认图片; 第二次是下载的网络图片.
源码中:

 // Update the caller to let them know that they should use the default bitmap.imageListener.onResponse(imageContainer, true);

使用时, 在加载图片之前, 需要判断Bitmap是否为空, 再加载.

代码

    /** * 从服务器下载图片 * onResponse会调用两次, 第一次Bitmap是null, 设置默认图片; 第二次是网络图片. * * @param listener 接收监听 */    protected void parseImage(final ImageListener<Bitmap> listener) {        WebScheduler.getInstance().getImageLoader().get(NetworkHelper.getRealUrl(mImgUrl),                new ImageLoader.ImageListener() {                    @Override                    public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) {                        mImgBitmap = imageContainer.getBitmap();                        if (mImgBitmap != null)                            listener.onResponse(mImgBitmap);                    }                    @Override                    public void onErrorResponse(VolleyError volleyError) {                        ToastHelper.getInstance().showToast(R.string.network_error);                    }                }, 0, 0        );    }

源码

    /** * Issues a bitmap request with the given URL if that image is not available * in the cache, and returns a bitmap container that contains all of the data * relating to the request (as well as the default image if the requested * image is not available). * @param requestUrl The url of the remote image * @param imageListener The listener to call when the remote image is loaded * @param maxWidth The maximum width of the returned image. * @param maxHeight The maximum height of the returned image. * @param scaleType The ImageViews ScaleType used to calculate the needed image size. * @return A container object that contains all of the properties of the request, as well as * the currently available image (default if remote is not loaded). */    public ImageContainer get(String requestUrl, ImageListener imageListener,            int maxWidth, int maxHeight, ScaleType scaleType) {        // only fulfill requests that were initiated from the main thread.        throwIfNotOnMainThread();        final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight, scaleType);        // Try to look up the request in the cache of remote images.        Bitmap cachedBitmap = mCache.getBitmap(cacheKey);        if (cachedBitmap != null) {            // Return the cached bitmap.            ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null);            imageListener.onResponse(container, true);            return container;        }        // The bitmap did not exist in the cache, fetch it!        ImageContainer imageContainer =                new ImageContainer(null, requestUrl, cacheKey, imageListener);        // Update the caller to let them know that they should use the default bitmap.        imageListener.onResponse(imageContainer, true);        // Check to see if a request is already in-flight.        BatchedImageRequest request = mInFlightRequests.get(cacheKey);        if (request != null) {            // If it is, add this request to the list of listeners.            request.addContainer(imageContainer);            return imageContainer;        }        // The request is not already in flight. Send the new request to the network and        // track it.        Request<Bitmap> newRequest = makeImageRequest(requestUrl, maxWidth, maxHeight, scaleType,                cacheKey);        mRequestQueue.add(newRequest);        mInFlightRequests.put(cacheKey,                new BatchedImageRequest(newRequest, imageContainer));        return imageContainer;    }

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. android 10 问题汇总
  3. CheckBox控件中background和button的区别
  4. Android(安卓)ZoomControls缩放控件
  5. Mac系统Android(安卓)M源码编译并导入Android(安卓)Studio查看
  6. Android(安卓)网络显示图片 通过代理访问
  7. Android(安卓)-- 重置Bitmap大小&&Bitmap转角度
  8. 关于Gallery使用
  9. Android(安卓)HashMap源码解析

随机推荐

  1. Android(安卓)call setting 源码分析 从
  2. Android——用户登陆及用户名和密码的保
  3. android
  4. Android遇上打印机
  5. Android(安卓)开发技术周报 Issue#287
  6. Android,谁动了我的内存(1)
  7. Android(安卓)网络(五) 推送
  8. 丢失Android系统库或者Conversion to Dal
  9. Android设备开机动画的原理和修改方式
  10. Android和H5、JS进行交互调用