Android Picasso清除磁盘和缓存中的图像

时间:2016-03-10 11:28:14

标签: android picasso image-loading image-caching

我正在使用Picasso进行图像加载,我将它与NetworkPolicy.OFFLINE一起使用, 但在某些时候我想从互联网更新图像,我正在尝试

Picasso.with(context).invalidate(url);
Picasso.with(context).load(url).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).networkPolicy(NetworkPolicy.NO_CACHE);

但是图像仍然从磁盘中获取,只有缓存无效。

3 个答案:

答案 0 :(得分:1)

使用此:

Picasso.with(context).load(url).memoryPolicy(MemoryPolicy.NO_CACHE).into(image);

答案 1 :(得分:0)

您可以使用以下代码以编程方式清除缓存。您可以在需要从API获取图像之前使用此代码。 如果您希望PICASSO永远不会缓存图像,您可以使用waseem共享的代码。但是如果你需要它来缓存,但有时你需要从API获取图像,你可以清除缓存。

public static void trimCache(Context context) {
      try {
         File dir = context.getCacheDir();
         if (dir != null && dir.isDirectory()) {
            deleteDir(dir);
         }
      } catch (Exception e) {
         // TODO: handle exception
      }
   }


  public static boolean deleteDir(File dir) {
  if (dir != null && dir.isDirectory()) {
     String[] children = dir.list();
     for (int i = 0; i < children.length; i++) {
        boolean success = deleteDir(new File(dir, children[i]));
        if (!success) {
           return false;
        }
     }
     return dir.delete();
  }
  else {
     return false;
  }

答案 2 :(得分:0)

所以当我还没有任何意见时,我就是这么说的。 关键是调用.into()方法来触发覆盖缓存。 所以我只用这个:

Picasso.with(context).load(url).into(new ImageView(context));