【问题标题】:Glide Image cache with id not urlGlide 图片缓存,id 不是 url
【发布时间】:2017-03-25 20:18:46
【问题描述】:

我正在使用从 Amazon S3 加载图像的 Android 应用程序。 图像 URL 随令牌和到期密钥随机变化。由于这个原因,我无法缓存图像 Glide。

有任何方法可以将 Glide 缓存键设置为任何静态 ID(如图像 ID)而不是 url。

我附加了我的代码 sn-p 以从 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);
                    }
                });

请建议我有什么方法可以在 Glide 中实现。

【问题讨论】:

  • 请在此处上传您的代码
  • 抱歉,我附加了代码以从 AWS S3 加载图像

标签: android android-glide image-caching


【解决方案1】:

重写 GlideUrl 类的 getCacheKey() 方法。此方法设置缓存图像的密钥。

这是怎么做的:

//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;
        }
    }
}

使用从该类获取的 URL 设置 imageView:

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

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2018-04-18
    • 2020-11-03
    • 2020-09-23
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多