码迷,mamicode.com
首页 > 移动开发 > 详细

Android - Volley的ImageLoader下载图片

时间:2015-08-05 07:48:31      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:mystra   android   volley   image   loader   

使用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;
    }

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android - Volley的ImageLoader下载图片

标签:mystra   android   volley   image   loader   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/47290723

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!