android - 使用 id 不是 url 的 Glide 图像缓存

标签 android android-glide image-caching

我正在开发从 Amazon S3 加载图像的 Android 应用程序。 图片 URL 随 token 和过期 key 随机变化。出于这个原因,我无法缓存图像 Glide。

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

我附加了我的代码 fragment 以从 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 中实现。

最佳答案

覆盖 GlideUrl 类的 getCacheKey() 方法。此方法设置用于缓存图像的 key 。

方法如下:

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

关于android - 使用 id 不是 url 的 Glide 图像缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550729/

相关文章:

android - 在android上保存多个图像文件的位置

jquery - 如何说服浏览器从缓存中加载图像而不是从服务器获取

android - 如何使用点击监听器和后台 worker 更改 android View 的外观?

java - Android线程不在后台运行

android - 使用 Glide 将 1 个图像加载到多个 ImageView

android - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障 - Firebase UI with Glide

ios - 如何设置 iOS 缓存和磁盘存储大小以及应用程序终止后如何从磁盘存储恢复缓存?

android - Flash Android 屏幕与准确的时间

android - 如何定期自动检查网站更新?

java - 我的 json 代码工作正常,但是当添加 Glide 来解析图像时应用程序强制停止