使用Glide无法刷新验证码图片

5

我尝试使用Glide将验证码图片加载到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);
2个回答

17

您可以始终使用 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相同)。添加签名 - 可以正常工作。谢谢。 - AndreyNik
Monkeyless,你说得对。我已经使用了.skipMemoryCache(true),它运行良好。然而,我面临另一个问题。当我加载验证码图片时,有时它可以显示在ImageView上,有时却不能,但没有任何异常。有什么想法吗? - user3288747
请查看项目维基上的调试页面,并考虑创建一个问题,如果您可以可靠地重现它: https://github.com/bumptech/glide/wiki/Debugging-and-Error-Handling - Sam Judd
1
.signature 工作正常,但使用它会有什么影响?它实际上是做什么的? - Alaa
1
签名会改变内存和磁盘缓存键。因此,每次使用新的随机签名实际上都会禁用磁盘缓存和内存缓存。您可以使用DiskCacheStrategy.NONE,但这并不足够,因为内存缓存键仍可能匹配。skipMemoryCache仅会跳过检查内存缓存,而不是检查活动资源,因此即使与DiskCacheStrategy.NONE配对使用,也不足以解决问题。 - Sam Judd
每次创建这个签名都会使它变慢。一定有更好的方法。 - The Fluffy T Rex

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

每次创建这个签名都会使其加载变慢。一定有更好的方法。 - The Fluffy T Rex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接