【问题标题】:load image from cache in volley从 volley 的缓存中加载图像
【发布时间】:2016-07-27 22:06:51
【问题描述】:

我使用 volley 在 android 中加载图像和缓存图像。当缓存请求图像时,我想从缓存中加载图像。所以我用下面的方法设置我的图像视图。

public void setImage(String url)
{
    final ImageRequest imgRequest = new ImageRequest(url,
            new Response.Listener<Bitmap>() {
                @Override
                public void onResponse(Bitmap response) {
                    img_thumb.setImageBitmap(response);
                }
            }, 0, 0, ImageView.ScaleType.FIT_XY, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            //img_thumb.setBackgroundColor(Color.parseColor("#ff0000"));
            error.printStackTrace();
        }
    });
    MyApplication.getInstance().addToRequestQueue(imgRequest);

}

但是当图像从缓存中可用时,我不知道如何从缓存中加载?

【问题讨论】:

    标签: android caching android-volley image-caching


    【解决方案1】:

    Volley 将在触发图像请求时自动从缓存中提取位图,前提是您使用有效的 ImageCache 对象提供了您创建的 ImageLoader

        mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
    
            private final LruCache<String, Bitmap> mMemCache = new LruCache<String, Bitmap>(CACHE_SIZE);
    
            @Override
            public Bitmap getBitmap(String url) {
                return mMemCache.get(url);
            }
    
            @Override
            public void putBitmap(String url, Bitmap bitmap) {
                mMemCache.put(url, bitmap);
            }
        });
    

    然后,要加载图像,请使用您创建的 ImageLoader

    /**
     * Performs a request to load an image from a given url.
     * @param url the url to load the image from.
     * @param listener the listener which will receive a call once the image load finishes (either with success or failure). The listener is called on the UI thread.
     * @param maxWidth the max width (in pixels) of the requested image. The returned bitmap will not exceed this width. Use 0 for unlimited
     * @param maxHeight the max height (in pixels) of the requested image. The returned bitmap will not exceed this height. Use 0 for unlimited.
     * @return an ImageContainer object which can be used to access the bitmap once the request has completed, or to cancel the request before it completes.
     */
    public ImageLoader.ImageContainer loadImageFromUrl(final String url, final ImageRequestListener listener, int maxWidth, int maxHeight) {
    
    
        if (url == null || Uri.parse(url) == null || Uri.parse(url).getHost() == null) {
            Logger.e("VolleyManager: loadImageFromUrl: invalid url " + url);
            listener.onImageLoadFailed();
            return null;
        }
    
        return mImageLoader.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                if (listener != null && response.getBitmap() != null) {
                    listener.onImageLoadComplete(response.getBitmap());
                } else if (listener != null) {
                    listener.onImageLoadFailed(;
                }
            }
    
            @Override
            public void onErrorResponse(VolleyError error) {
                if (listener != null) {
                    listener.onImageLoadFailed();
                }
            }
        }, maxWidth, maxHeight);
    

    【讨论】:

    • 谢谢,请检查我的第二个答案。如何将您的代码与我的代码集成?
    • 只需使用loadimagefromurl方法
    • 什么是 ImageRequestListener?我该如何使用这个方法
    • 这只是我创建的一个界面,您可以根据需要进行更改。
    • 您是否有任何完整的示例来详细解释 Volley 图像缓存和从缓存中加载?我读了很多,但我仍然无法缓存任何图像。我很困惑
    猜你喜欢
    • 2014-08-13
    • 2013-10-24
    • 2014-03-17
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-05-22
    相关资源
    最近更新 更多