当前位置:  开发笔记 > 运维 > 正文

滑动不更新相同网址的图像android?

如何解决《滑动不更新相同网址的图像android?》经验,为你挑选了5个好方法。

我有一个相同的图像网址.当我多次更新此图像时,它会显示上一张图像.服务器上的图像和图片版本已更新,但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次尝试改变图像后保持相同



1> 小智..:
//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);



2> steven0529..:

滑翔4.x.

Glide.with(context)
     .load(imageUrl)
     .apply(RequestOptions.skipMemoryCacheOf(true))
     .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))
     .into(imageView);

滑翔3.x.

Glide.with(context)
     .load(imageUrl)
     .skipMemoryCache(true)
     .diskCacheStrategy(DiskCacheStrategy.NONE)
     .into(imageView);



3> MGDavies..:

这是一个老问题,所以我相信你现在已经解决了.不过我相信这两个大型图书馆(毕加索和格莱德)现在都支持类似的东西.

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.

祝好运!



4> Abner Escóci..:

我的情况是Glide无法识别.signature(),因此,除了@MGDavies的答案之外,您可能还需要这样的东西

// in kotlin
Glide.with(context)
        .load("url")
        //using apply to RequestOptions instead signature directly
        .apply(RequestOptions().signature(ObjectKey("time that image was updated")))
        .into(thumb)



5> Anix PasBeso..:

首次加载图片时,图片会本地存储在所谓的缓存内存(或简称为缓存)中。当您第二次请求它时,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);

或为每张图片使用唯一的签名。(Kinda 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)

进一步阅读

滑行缓存API 在这里。

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有