清除Picasso的缓存

Par*_*n M 12 memory android caching picasso

我试图通过Android编码清除Picasso的缓存.

任何人都可以帮我解决这个问题..?

我尝试使用以下代码,但这在我的情况下没用:

Picasso.with(getActivity()).load(data.get(pos).getFeed_thumb_image()).skipMemoryCache().into(image);
Run Code Online (Sandbox Code Playgroud)

Moh*_*med 32

请改用:

 Picasso.with(getContext()).load(data.get(pos).getFeed_thumb_image()).memoryPolicy(MemoryPolicy.NO_CACHE).into(image);
Run Code Online (Sandbox Code Playgroud)

  • 如果想要缓存所有图像一段时间,然后在我不再需要它时清除所有缓存呢? (4认同)
  • 没为我工作。因此,我还添加了.networkpolicy(NetworkPolicy.NO_CACHE)。然后只有工作。 (3认同)

Mur*_*ain 11

像这样删除Picasso的缓存.

public class Clear {

    public static void clearCache (Picasso p) {
        p.cache.clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

此util类可以为您清除缓存.你只需要调用它:

Clear.clearCache(Picasso.with(context));
Run Code Online (Sandbox Code Playgroud)

编辑:
Clear类必须在包中:

package com.squareup.picasso;
Run Code Online (Sandbox Code Playgroud)

因为无法从该包外部访问缓存.就像在这个答案:https://stackoverflow.com/a/23544650/4585226

  • 我只使用Picasso jar而且我没有使用任何外部毕加索库.它说"p.cache"是不可见的. (2认同)

Par*_*n M 9

如果你正在尝试通过加载的Json图像(从DB)尝试清除networkCache一个更好的结果.

Picasso.with(context).load(uri).networkPolicy(NetworkPolicy.NO_CACHE)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .placeholder(R.drawable.bv_logo_default).stableKey(id)
        .into(viewImage_imageView);
Run Code Online (Sandbox Code Playgroud)


Dev*_*aja 6

如果想用给定的 Uri 刷新图像,而不是清除完整的缓存。试试这个Picasso.with(context).invalidate(uri);它在内部从毕加索维护的缓存中删除密钥。

摘自 Picasso.java /** * Invalidate all memory cached images for the specified {@code uri}. * * @see #invalidate(String) * @see #invalidate(File) */ public void invalidate(Uri uri) { if (uri == null) { throw new IllegalArgumentException("uri == null"); } cache.clearKeyUri(uri.toString()); }