【问题标题】:Captcha image cannot be refresh by using Glide使用 Glide 无法刷新验证码图像
【发布时间】:2017-10-22 18:15:13
【问题描述】:

我尝试使用 Glide 将 Captcha 图像加载到 ImageView 中。第一次加载没问题。但是,当我将验证码图像重新加载到同一个 ImageView 中时,ImageView 不会刷新到新图像。有谁知道如何解决这个问题?

String url = "https://captcha_path";
ImageView imgView = (ImageView)getActivity().findViewById(R.id.imgView);

Glide.with(getActivity()).load(url).asBitmap().diskCacheStrategy(DiskCacheStrategy.NONE).into(imgView);

【问题讨论】:

    标签: android imageview okhttp android-glide


    【解决方案1】:

    您始终可以使用Glide.clear(),然后再次调用 Glide.with(...).load()。如果图像更改时您的 url 没有更改,您可能还需要将 .skipMemoryCache(true) 添加到您的加载调用中。如需更多控制,请查看.signature() API。您可以随时执行以下操作:

    Glide.with(fragment)
        .load(url)
        .signature(new StringSignature(UUID.randomUUID().toString()))
        .into(imgView);
    

    【讨论】:

    • 我尝试使用 Glide.clear(imageView)。 ImageView(方法 imageView.getTag())包含标签 TAG = com.bumptech.glide.request.GenericRequest@425455e0,但 Glide 不清除视图也不更新图像(url 相同)。添加签名 - 工作正常。谢谢。
    • 无猴子,你是对的。我使用了 .skipMemoryCache(true) 并且效果很好。但是,我面临另一个问题。当我加载验证码图像时,有时它会显示在 ImageView 上。有时不能,但无一例外。有什么想法吗?
    • 查看项目 wiki 上的调试页面,如果您能可靠地重现此问题,请考虑创建问题:github.com/bumptech/glide/wiki/Debugging-and-Error-Handling
    • .signature 工作正常,但使用它有什么影响?它实际上是做什么的?
    • 签名更改内存和磁盘缓存键。因此,每次使用新的随机签名都会有效地禁用磁盘缓存和内存缓存。您可以使用 DiskCacheStrategy.NONE,但这还不够,因为内存缓存键可能仍然匹配。 skipMemoryCache 只会跳过检查内存缓存,不检查活动资源,因此即使与 DiskCacheStrategy.NONE 配对也是不够的。
    【解决方案2】:
    Glide.with(fragment)
        .load(url)
        .signature(new StringSignature(UUID.randomUUID().toString()))
        .into(imgView);
    

    StringSignature 替换为 ObjectKey(适用于 Glide v4)

    Glide.with(fragment)
            .load(url)
            .signature(new ObjectKey(UUID.randomUUID().toString()))
            .into(imgView);
    

    【讨论】:

    • 每次创建此签名会使其加载速度变慢。一定有更好的办法
    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多