我对图片有相同的网址。当我多次更新此图像时,它会显示上一张图像。服务器上的图像和图片版本已更新,但Glide未显示新图像。我希望每次都获取新图像并进行缓存。
Glide.with(context)
.load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture())
.placeholder(R.drawable.ic_profile).dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.signature(new (SettingManager.getUserPictureVersion(context)))
.into(ivUserProfilePhoto);
我可以通过更改互联网来重现这个错误,在一个互联网上,它在其他互联网上的变化图像在2或3次尝试更改图像后保持相同
答案 0 :(得分:21)
//Use bellow code, it work for me.Set skip Memory Cache to true. it will load the image every time.
Glide.with(Activity.this)
.load(theImagePath)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(myImageViewPhoto);
答案 1 :(得分:17)
Glide 4.x
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions.skipMemoryCacheOf(true))
.apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))
.into(imageView);
Glide 3.x
Glide.with(context)
.load(imageUrl)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);
答案 2 :(得分:5)
这是一个老问题,所以我相信你现在已经解决了。但是我相信两个大型图书馆(毕加索和格莱德)现在都支持类似的东西。
Glide有自己的签名API,您可以查看: https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation
Glide.with(yourFragment)
.load(yourFileDataModel)
.signature(new StringSignature(yourVersionMetadata))
.into(yourImageView);
我自己没有机会使用它,但看起来你需要调用你的API来获取元数据版本,然后再调用它来实现它。
或者,看看ETags。
祝你好运!答案 3 :(得分:4)
第一次加载图片时,它会在本地存储在称为缓存内存(或简称缓存)的内容中。当您再次请求它时,Glide会从缓存中提取,就好像它是一个成功的请求一样。
这有很多好的理由,例如:卸载服务器,为用户保存一些数据,并通过快速响应为他们提供流畅的用户体验。
现在,关于你的问题。您需要禁用缓存以强制Glide每次请求时远程获取图像。只需执行以下操作:
Glide.with(context)
.load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture())
.placeholder(R.drawable.ic_profile).dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.signature(new (SettingManager.getUserPictureVersion(context)))
.into(ivUserProfilePhoto);
或者为每张照片使用唯一的签名。 (有点hacky,但做的伎俩)
Glide.with(context)
.load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture())
.placeholder(R.drawable.ic_profile).dontAnimate()
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.into(ivUserProfilePhoto);
另一种干净的方法是在您的服务器中配置图片的缓存策略并使用.diskCacheStrategy(DiskCacheStrategy.SOURCE)
。
Glide缓存API here。
答案 4 :(得分:2)
加载或更新新图片时,请使用以下内容清除Glide内存和缓存:
| == |清除滑翔记忆
Glide.get(getApplicationContext()).clearMemory();
| == | Clear Glide Cache()
void clearGlideDiskCache()
{
new Thread(new Runnable()
{
@Override
public void run()
{
Glide.get(getApplicationContext()).clearDiskCache();
}
}).start();
}
答案 5 :(得分:2)
我的情况下,滑翔机无法识别Sub LoopOptoRun()
'
' Loop OptoRun Macro
'
Dim currentPoint As Long
NumberOfLoops = InputBox("How Many Lineups?")
If Not IsNumeric(NumberOfLoops) Then NumberOfLoops = 1
currentPoint = 1
Do Until currentPoint > NumberOfLoops
ActiveSheet.Unprotect Password:="9061"
SolverOk SetCell:="$AC$1", MaxMinVal:=1, ValueOf:=0,
ByChange:="$Q$2:$Q$200", _
Engine:=2, EngineDesc:="Simplex LP"
SolverOk SetCell:="$AC$1", MaxMinVal:=1, ValueOf:=0,
ByChange:="$Q$2:$Q$200", _
Engine:=2, EngineDesc:="Simplex LP"
SolverSolve UserFinish:=True
Range("priorProjPts").Value = Range("totProjPts").Value - 0.001
ActiveSheet.Protect Password:="9061"
**Range("AH4:AH11").Select
Selection.Copy
Sheets("Lineup_VIEW").Select
Range("A200").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True
Range("A3").Select
Sheets("Optimizer").Select
Application.CutCopyMode = False**
currentPoint = currentPoint + 1
Loop
End Sub
,因此,除了@MGDavies的answer外,您可能还需要这样的东西
.signature()
答案 6 :(得分:1)
现在滑行最新版本,您必须使用RequestOption
清除缓存。
RequestOptions options = new RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true);
或者对于每次加载图片,您都必须使用 String 作为signature
。
RequestOptions options = new RequestOptions()
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())));
最后:
Glide.with(CompressSingleActivity.this)
.applyDefaultRequestOptions(options)
.load(currentFile)
.into(currentImageView);
答案 7 :(得分:1)
Glide 4.8.0
Glide.with(mContext).asBitmap()
.load(nopicUrl)
.apply(RequestOptions.skipMemoryCacheOf(true))
.apply(RequestOptions.signatureOf(new ObjectKey(String.valueOf(System.currentTimeMillis()))))
.apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.DATA))
.into(ivImageView);
答案 8 :(得分:0)
这好像是与Glide Library本身有关的问题,我找到了可以解决此问题的技巧,只需在图像网址后添加一个随机数作为查询,例如下面的示例代码,它可以解决我的问题,希望对您有所帮助也是
Random random = new Random();
int randomInt = random.nextInt();
Glide.with(context)
.applyDefaultRequestOptions(new RequestOptions()
.circleCrop().diskCacheStrategy(DiskCacheStrategy.NONE))
.load(ConstantVars.BaseUrl + userModel.getAvatarURL() + "?" + randomInt)
.apply(new RequestOptions().error(R.drawable.himart_place_holder))
.into(imageViewProfile);
它将使Glide可以在您请求时重新加载图像,就像根本没有缓存可读取一样。
答案 9 :(得分:0)
尝试使用RequestOptions:
/* unvisited link */
a:link {
color: red;
background-color: white
}
/* visited link */
a:visited {
color: green;
background-color: white
}
/* mouse over link */
a:hover {
color: hotpink;
background-color: white
}
/* selected link */
a:active {
color: blue;
background-color: white
}
如果.setDefaultRequestOptions(requestOptions)不起作用,请使用.apply(requestOptions):
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);
Glide.with(context)
.setDefaultRequestOptions(requestOptions)
.load(url).into(holder.imageView);