Glide Image cache with id not url

喜夏-厌秋 提交于 2019-12-12 15:27:13

问题


I am working in Android app that load images from Amazon S3. The Image URL randomly changes with token and expiry key. For that reason i can't cache the image Glide.

There is any way to set Glide cache key as any static ID(like image id) not url.

I attached my code snippet to load image from AWS

Glide.with(remoteGalleryAct).load(photoFinalImageURL)
                .signature(new StringSignature(getImageUrl(photoFinalImageURL)))// remove AWS keys
                .error(defaultNoImageDrawable)
                .placeholder(defaultNoImageDrawable)
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .into(new ImageViewTarget<GlideDrawable>(photoHolder.photo) {
                    @Override
                    protected void setResource(GlideDrawable resource) {
                    }

                    @Override
                    public void onResourceReady(final GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                        //super.onResourceReady(resource, glideAnimation);
                        view.setImageDrawable(resource);
                    }
                });

Please suggest me there is any way to achieve in Glide.


回答1:


Override getCacheKey() method of GlideUrl class. This method sets the key for caching the image.

Here's how to do it:

//Create a custom class and override the method to remove authentication header from the S3 image url

public class GlideUrlCustomCacheKey extends GlideUrl {
    public GlideUrlCustomCacheKey(String url) {
        super(url);
    }

    public GlideUrlCustomCacheKey(String url, Headers headers) {
        super(url, headers);
    }

    public GlideUrlCustomCacheKey(URL url) {
        super(url);
    }

    public GlideUrlCustomCacheKey(URL url, Headers headers) {
        super(url, headers);
    }

    @Override
    public String getCacheKey() {
        String url = toStringUrl();
        if (url.contains("?")) {
            return url.substring(0, url.lastIndexOf("?"));
        } else {
            return url;
        }
    }
}

Set the imageView with the URL obtained from this class:

Glide.with(context).load(new GlideUrlCustomCacheKey(buzzUrl)).into(imageView);


来源:https://stackoverflow.com/questions/40550729/glide-image-cache-with-id-not-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!