清除Android的毕加索图像库的磁盘/ SD卡caching

我正在使用毕加索从我的服务器加载图像。 它工作正常,但我正在加载图像,并稍后进行更改。 但毕加索的图像caching在磁盘的某处(我检查了SD卡,找不到任何毕加索存储的目录)。

我试图删除高速caching,如接受的回答这个问题所build议的: 无效caching在毕加索

我也尝试使用以下方式加载图像时跳过caching:Picasso.with(ctx).load(new File(“/ path / to / image”))。skipMemoryCache()。into(imageView)

但是这些方法都没有工作。

感谢您的任何build议或提示,可以帮助我通过这个问题。

Solutions Collecting From Web of "清除Android的毕加索图像库的磁盘/ SD卡caching"

Picasso磁盘映像caching在应用程序内部caching目录中。 看看这里的方法createDefaultCacheDir https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso/Utils.java

您可以像这样清除getCacheDir/picasso-cache所有图像

  public boolean clearImageDiskCache() { File cache = new File(mContext.getApplicationContext().getCacheDir(), "picasso-cache"); if (cache.exists() && cache.isDirectory()) { return deleteDir(cache); } return false; } 

删除目录中的所有文件

 public static boolean deleteDir(File dir) { if (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; } } } // The directory is now empty so delete it return dir.delete(); } 

您可以阅读此条目https://stackoverflow.com/a/18964588/2358095了解毕加索磁盘caching如何工作&#x3002;

所以首先你必须在ResponseCacheIcs类中添加static void delete(Object cache)方法。 这个类在UrlConnectionDownloader.java中定义。 看起来像这样:

 private static class ResponseCacheIcs { static Object install(Context context) throws IOException { File cacheDir = Utils.createDefaultCacheDir(context); HttpResponseCache cache = HttpResponseCache.getInstalled(); if (cache == null) { long maxSize = Utils.calculateDiskCacheSize(cacheDir); cache = HttpResponseCache.install(cacheDir, maxSize); } return cache; } static void close(Object cache) { try { ((HttpResponseCache) cache).close(); } catch (IOException ignored) { } } static void delete(Object cache) { try { ((HttpResponseCache) cache).delete(); } catch (IOException ignored) { } } } 

之后,你必须添加

 void clearDiskCache(); 

方法在Downloader.java中。 然后你必须在UrlConnectionDownloader.java和OkHttpDownloader.java中添加未实现的方法。 你应该像这样在UrlConnectionDownloader.java中定义public void clearDiskCache()方法:

 @Override public void clearDiskCache() { // TODO Auto-generated method stub if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && cache != null) { ResponseCacheIcs.delete(cache); } } 

那么你必须添加:

 void clearDiskCache(){ downloader.clearDiskCache(); } 

方法在Dispacher.java中。 然后添加:

 public void clearDiskCache(){ dispatcher.clearDiskCache(); } 

方法在Picasso.java中。

答对了!!! 现在,您可以在代码中调用clearDiskCache()方法。 这里是一个例子:

 Picasso picasso = Picasso.with(TestActivity.this); picasso.clearDiskCache(); picasso.setDebugging(true); picasso.setIndicatorsEnabled(true); picasso.setLoggingEnabled(true); picasso.load(imageURL).into(imageView);