Glide固定URL图片改变时更新方法。

       当我们使用Glide框架去加载图片时,使用时非常方便的。但是有一个问题,就是对于同一个url对于glide是不会加载两遍的。因为glide默认开启缓存机制,为了节省流量glide会使用缓存里的图片。但是我们不想这样,我们想要更新。

      解决方法一:取消缓存机制,示例代码如下:

 Glide.with(getContext()).load(path) .skipMemoryCache(true) // 不使用内存缓存
                                                        .diskCacheStrategy(DiskCacheStrategy.NONE).into(headImage);

      这种方法虽然解决了问题,可也是个相当糟糕的方法。因为除了更新时时需要重新加载,其他情况都是不要的,其他情况完全可以利用缓存机制来达到节省流量的效果。所以这个方法很不好。

    解决方法二:签名法。示例如下:

     

SharedPreferences pref=
getActivity().getSharedPreferences("updateImageKey",MODE_PRIVATE);
                                             
String  updateTime=pref.getString("updateTime",System.currentTimeMillis()+"");
                                               Glide.with(getContext()).load(p).signature(new StringSignature(updateTime)).into(Image);

我们每次加载图片时都往里面写一个签名这个签名如果与上次的一致就是不去更新,如果不一致就是要更新。这个签名可以是时间戳。所以当我们想让图片更新时就在signature(new StringSignature(updateTime))写一个与上次写入的不一样的签名就行了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 怎么办? 这个问题可以通过使用异常处理来解决。你可以在Glide的请求中捕获异常,并在异常发生使用默认图像。例如: ``` try { Glide.with(context) .load(url) .into(imageView); } catch (Exception e) { Glide.with(context) .load(R.drawable.default_image) .into(imageView); } ``` 这样,如果图像加载失败,Glide使用默认图像代替。 ### 回答2: Android Glide是一个流行的图片加载库,它可以方便地加载网络上的图片并进行缓存。当遇到加载失败的URL,我们可以通过一些额外的步骤来缓存一个默认的Bitmap图片。下面是一个可能的实现方式: 首先,我们需要为Glide配置一个失败的回调,即使用`error()`方法指定一个加载失败显示的图片资源。 ```java Glide.with(context) .load(url) .error(R.drawable.default_image) // 设置加载失败显示的图片 .into(imageView); ``` 然后,我们可以使用Glide的生命周期方法来监听图片加载的结果,其中的`onLoadFailed()`方法加载失败被调用。我们可以在该方法中获取失败的URL,然后使用`Signature.obtain()`来创建一个唯一标识符,并将其存储到Glide的缓存中。 ```java Glide.with(context) .load(url) .error(R.drawable.default_image) .signature(new StringSignature(url)) // 使用URL作为唯一标识符 .listener(new RequestListener<Drawable>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { // 从失败的URL中创建唯一标识符 Signature signature = new StringSignature(url); // 获取Glide的缓存 DiskCache cache = Glide.get(context).getDiskCache(); try { // 检查缓存中是否已存在该图片 if (!cache.contains(signature)) { // 如果没有,则加载默认图片,并存储到缓存中 Bitmap defaultBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.default_image); cache.put(signature, new BitmapDrawable(context.getResources(), defaultBitmap).getBitmap()); } } catch (IOException ex) { ex.printStackTrace(); } return false; } // ... 其他回调方法 }) .into(imageView); ``` 这样,当Glide加载URL图片失败将默认图片存储到缓存中,并在下一次加载同一个URL使用缓存的图片。 需要注意的是,这只是一种实现方式,具体的实现方式可以根据项目的需求进行调整和优化。 ### 回答3: Android Glide 是一个强大的图片加载库,它可以帮助我们更高效地加载和显示图片。对于失败的 URLGlide 也提供了一种方法来缓存图片。 首先,当使用 Glide 加载图片,可以通过 `.error()` 方法设置一个替代图片,用于在加载失败显示。这个替代图片可以是一个本地的资源文件,或者是一个已经缓存过的 Bitmap 对象。 接下来,我们可以利用 Glide 的缓存机制来将成功加载过的图片缓存到本地。Glide 默认图片缓存在设备的磁盘上,我们可以通过 `.diskCacheStrategy()` 方法来设置缓存策略。常用的策略包括: 1. `DiskCacheStrategy.ALL`:缓存所有版本的图片,默认策略。 2. `DiskCacheStrategy.NONE`:不缓存任何图片。 3. `DiskCacheStrategy.DATA`:只缓存原始分辨率的图片。 4. `DiskCacheStrategy.RESOURCE`:只缓存资源分辨率的图片。 5. `DiskCacheStrategy.AUTOMATIC`:根据原始图片和 ImageView 的大小来自动判断是否缓存。 如果我们想要将失败的 URL 缓存为 Bitmap 图片,可以先将图片通过其他方式或者其他库下载到本地,并将其转换为 Glide 可以识别的 Bitmap 对象。然后,使用 Glide 的 `.load()` 方法加载这个 Bitmap 对象即可。 需要注意的是,缓存图片可能占用较多磁盘空间,如果需要在缓存达到一定大小进行清理,可以使用 `.setMemoryCacheSize()` 方法设置内存缓存的大小,并使用 `.setDiskCacheSize()` 方法设置磁盘缓存的大小。 总之,Android Glide 提供了多种方式来处理失败的 URL 并缓存图片,我们可以根据具体的需求选择合适的方法进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值