Mémoire Clear Cache de Picasso

J'essaie d'effacer la mémoire cache de Picasso via le codage Android.

Quelqu'un peut-il m'aider dans ce problème …?

J'ai essayé d'utiliser le code suivant, mais ce n'était pas utile dans mon cas:

Picasso.with(getActivity()).load(data.get(pos).getFeed_thumb_image()).skipMemoryCache().into(image); 

  • Toujours disparaître de l'espace réservé avec Picasso
  • Picasso a détecté un OkHttp non pris en charge sur le classpath
  • Comment charger l'arrière-plan de la mise en page en utilisant Picasso
  • Les coins arrondis avec Picasso
  • Redimensionner l'image en pleine largeur et en hauteur variable avec Picasso
  • Les grandes images (du fichier) ne sont pas chargées dans Picasso, aucune erreur évidente n'a été vue
  • Charger Bitmap avec RGB_565 via Picasso
  • Android Picasso auto tourne l'image
  • 8 Solutions collect form web for “Mémoire Clear Cache de Picasso”

    Utilisez-le à la place:

      Picasso.with(getContext()).load(data.get(pos).getFeed_thumb_image()).memoryPolicy(MemoryPolicy.NO_CACHE).into(image); 

    Lorsque l'activité détruit, malheureusement, le bitmap n'a pas été recyclé si nous utilisons Picasso. J'essaie de recycler par programme le bitmap, ce qui est chargé dans la vue d'image. Il existe un moyen de faire référence au bitmap chargé en utilisant Target .

      Target mBackgroundTarget = new Target() { Bitmap mBitmap; @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { if (bitmap == null || bitmap.isRecycled()) return; mBitmap = bitmap; mBgImage.setImageBitmap(bitmap); mHandler.post(new Runnable() { @Override public void run() { // Do some animation } }); } @Override public void onBitmapFailed(Drawable errorDrawable) { recycle(); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } /** * Recycle bitmap to free memory */ private void recycle() { if (mBitmap != null && !mBitmap.isRecycled()) { mBitmap.recycle(); mBitmap = null; System.gc(); } } }; 

    Et lorsque Activity destroy, j'appelle onBitmapFailed(null) pour recycler le bitmap chargé.

     @Override protected void onDestroy() { super.onDestroy(); try { if (mBackgroundTarget != null) { mBackgroundTarget.onBitmapFailed(null); Picasso.with(context).cancelRequest(mBackgroundTarget); } } catch (Exception e) { e.printStackTrace(); } } 

    Mais rappelez-vous, NE PAS CACHER L'IMAGE EN MÉMOIRE dans ce cas, cela entraînera l'utilisation d'une exception de bitmap recyclée.

     Picasso.with(context) .load(imageUrl) .resize(width, height) .memoryPolicy(MemoryPolicy.NO_CACHE) .into(mBackgroundTarget); 

    J'espère que cette aide.

    Supprimez le cache de Picasso comme ça.

     public class Clear { public static void clearCache (Picasso p) { p.cache.clear(); } } 

    Cette classe util peut effacer le cache pour vous. Il suffit de l'appeler:

     Clear.clearCache(Picasso.with(context)); 

    EDIT :
    La classe Clear doit être dans le package:

     package com.squareup.picasso; 

    Étant donné que le cache n'est pas accessible depuis l'extérieur de ce paquet. Comme dans cette réponse: https://stackoverflow.com/a/23544650/4585226

    Si vous essayez de charger une image via Json (à partir de db) essayez d'effacer le NetworkCache pour obtenir un meilleur résultat.

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

    Si vous faites référence à votre implémentation de Downloader personnalisée, vous pouvez effacer le cache.

     public class PicassoUtil { private static Picasso sInstance; private static OkHttp22Downloader sDownloader; public static Picasso getPicasso(Context context){ if(sInstance == null) { sDownloader = new OkHttp22Downloader(context) Picasso.Builder builder = new Picasso.Builder(context); builder.downloader(sDownloader); sInstance = builder.build(sDownloader); } return sInstance; } public static void clearCache(){ if(sDownloader != null){ sDownloader.clearCache(); } } } 

    Il est important d'avoir accès à votre client http et à son Cache . Dans ma mise en œuvre, il y a un accès au cache, donc la suppression du cache avec la méthode clearCache() .

    J'ai eu le même problème. Cela a fonctionné pour moi. J'ai utilisé Picasso dans RecycleView dans une boîte de dialogue . Lorsque j'ai fermé le dialogue, Picasso ne supprime pas le cache. Mais pendant que vous utilisez la boîte de dialogue, il efface le cache d'image . Cependant, il existe un cache qui n'est pas effacé. Peut-être que le cache qui n'a pas été effacé est le dernier que vous avez vu dans le dialogue avant dialogue.dismiss ().

    Utilisez cette mémoirePolicy (MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)

     Picasso.with(activity).load(file).resize(100,100).centerCrop().memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE).into(contactImage, new com.squareup.picasso.Callback() { @Override public void onSuccess() { } @Override public void onError() { } }); 
      Picasso.with(this.getContext()).load(gamePlayer.getPlayerProfileUrl()).skipMemoryCache().into(iv); 

    Cela fonctionne aussi

    Au lieu de nettoyer le cache complet si l'on souhaite rafraîchir l'image avec Uri donné. Essayez ce Picasso.with(context).invalidate(uri); Il supprime en interne la clé du cache conservé par Picasso.

    Extrait de 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()); } /** * 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()); }

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.