Cache in Picasso ungültig machen

Lesezeit: 5 Minuten

Cache in Picasso ungultig machen
Martin

Ich lade ein Bild von der Festplatte mit Picassoz.B, Picasso.with(ctx).load(new File("/path/to/image")).into(imageView)aber immer wenn ich ein neues Bild in dieser Datei speichere und meine aktualisiere ImageViewPicasso hat die Bitmap immer noch zwischengespeichert.

Ist es möglich, den Cache in Picasso ungültig zu machen?

  • nach dem Picasso.with(getActivity()).invalidate(file); wie kann ich wieder cachen?

    – Smoking-Welt

    31. Mai 2017 um 12:20 Uhr

Cache in Picasso ungultig machen
mes

In den neueren Versionen von Picasso gibt es eine neue Methode zum Invalidieren ohne Problemumgehungen, daher denke ich, dass die zuvor erwähnte benutzerdefinierte PicassoTools-Klasse in diesem Fall jetzt veraltet ist

Picasso.with(getActivity()).invalidate(file);

  • Nun, das macht eine einzelne Datei ungültig. Es gibt immer noch keine Methode, um den gesamten Cache ungültig zu machen. Wie auch immer, ich habe vor fast einem Jahr darauf geantwortet, also bin ich nicht überrascht, dass sie es seitdem hinzugefügt haben.

    – Schalafi

    22. Februar 2015 um 15:13 Uhr

  • Ja, es macht eine einzelne Datei ungültig, wie vom Autor gewünscht, es besteht keine Notwendigkeit, den gesamten Cache zu löschen, es ist nicht effektiv. Haben Sie vor einem Jahr selbst versucht, es in Picasso umzusetzen?

    – mes

    22. Februar 2015 um 16:10 Uhr


  • Stellen Sie sicher, dass Sie die neueste Version von Picasso oder einer haben IllegalStateException könnte geworfen werden. github.com/square/picasso/commit/…

    – Jared Rummler

    7. März 2015 um 5:32 Uhr

  • invalidate funktioniert nicht, das Bild verbleibt weiterhin im Disk-Cache

    – Benutzer5155835

    28. Oktober 2015 um 17:40 Uhr

  • Sie müssen das Bild mit laden Picasso.with(imageView.getContext()).load(imageUrl).networkPolicy(NetworkPolicy.NO_CACHE).into(imageView); da invalidate() den Netzwerk-Cache nicht löscht

    – Joe Maher

    2. März 2016 um 2:15 Uhr

Basierend auf Ihrer eigenen Antwort gibt es tatsächlich einen einfacheren Weg, dies zu tun, ohne die Bibliothek zu verzweigen. Fügen Sie diese Klasse dem Paket com.squareup.picasso hinzu.

package com.squareup.picasso;

public class PicassoTools {

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

Da der Cache über Paketsichtbarkeit verfügt, kann diese Dienstprogrammklasse den Cache für Sie löschen. Sie müssen es nur nennen:

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

  • Sie müssen nicht auf das Glas zugreifen. Sie müssen diese Datei erstellen und im richtigen Paket platzieren (com.squareup.picasso)

    – Schalafi

    19. Mai 2014 um 9:11 Uhr

  • Gibt es eine Möglichkeit, dies zu tun, wenn Sie Gradle mit Android Studio anstelle der Add-On-JAR-Datei verwenden?

    – Der Salatmeister

    11. Juli 2014 um 20:05 Uhr

  • Nein, Sie müssen das Picasso-Glas nicht anfassen, Sie müssen nur die Datei im richtigen Paket erstellen.

    – Schalafi

    19. November 2014 um 10:29 Uhr

  • Schade, das Picasso.with(getApplication()).cache.clear();funktioniert nicht. Es wäre viel sauberer.

    – Michael Schmidt

    4. April 2015 um 9:24 Uhr

  • Das Feld Picasso.cache ist nicht sichtbar!!

    – Iman Marashi

    24. März 2016 um 21:07 Uhr

1646247190 831 Cache in Picasso ungultig machen
Виталий Ермолович

Speicher-Cache- und Festplatten-Cache-Prüfung abbrechen, indem Speicherrichtlinie durch Flag angegeben wird: emoryPolicy.NO_CACHE und NetworkPolicy.NO_CACHE wie im folgenden Code-Snippet:

   mPicasso.with(mContext)
            .load(url)
            .memoryPolicy(MemoryPolicy.NO_CACHE )
            .networkPolicy(NetworkPolicy.NO_CACHE)
            .resize(512, 512)
            .error(R.drawable.login)
            .noFade()
            .into(imageView);

  • Danke! Das Hinzufügen von .networkPolicy (NetworkPolicy.NO_CACHE) hat bei mir funktioniert.

    – Kann Uludağ

    15. Oktober 2015 um 13:20 Uhr

  • Durch diese Antwort wurden Bilder nie zwischengespeichert! warum also verwenden?

    – Iman Marashi

    24. März 2016 um 21:00 Uhr

  • @ImanMarashi ist nützlich, wenn Sie normalerweise mit derselben URL und unterschiedlichen Bildwerten arbeiten (Beispiel: amazonws.com/yourProject/user_profile_images/user1/profile.jpg. Die URL ändert sich nie, aber ihr Wert.

    – Borja

    11. April 2016 um 10:15 Uhr


1646247191 224 Cache in Picasso ungultig machen
dercilima

Versuchen zu benutzen:

Picasso.with(ctx).load(new File("/path/to/image")).skipMemoryCache().into(imageView)

Die Reihenfolge der Suchbilder in Picasso ist: Memory Cache -> Disk Cache -> Network

Es gibt also nur wenige Szenarien, die wir benötigen, um den Cache in Picasso ungültig zu machen:

1.Speichercache ungültig machen:

  • Benutzerfall: Wenn das Image bereits im Disk-Cache oder Remote-Host aktualisiert wird
  • Lösung: Leeren Sie den Cache von URL, Datei, Uri, falls vorhanden

    mPicasso.with(appContext).invalidate(File);
    mPicasso.with(appContext).invalidate(Url);
    mPicasso.with(appContext).invalidate(Uri);
    

.

2. Speicher-Cache und Festplatten-Cache ungültig machen Online

※Hinweis: Online bedeutet Update direkt auf ImageView

  • Benutzerfall: Image auf Remote-Host aktualisiert

  • Lösung: Bild im Speicher-Cache und Festplatten-Cache abbrechen und dann Bild auf Remote-Host anfordern

    mPicasso.with(appContext)
        .load(url)
        .memoryPolicy(MemoryPolicy.NO_CACHE )
        .networkPolicy(NetworkPolicy.NO_CACHE)
        .into(imageView);
    

    -> Memory Cache und Disk Cache abbrechen

.

3. Speicher-Cache und Festplatten-Cache ungültig machen Offline

※ Hinweis: Offline bedeutet Update, nicht Update auf ImageView, nur Hintergrundabruf zur späteren Verwendung

  • Benutzerfall: Sie wissen, dass das Bild auf dem Remote-Host aktualisiert wurde, aber Sie möchten den Cache nur aktualisieren, um ihn anschließend zu verwenden (nicht in die Bildansicht aktualisieren).
  • Lösung: Nur holen

     mPicasso.with(appContext)
        .load(url)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .networkPolicy(NetworkPolicy.NO_CACHE)
        .fetch();
    

※Hinweis: Die Verwendung von fetch() ist gut, aber es verbraucht auch Netzwerkressourcen, also überlegen Sie es sich bitte sorgfältig, überprüfen Sie Szenario 4 unten für eine bessere Lösung

4. Speicher-Cache und Festplatten-Cache ungültig machen Offline wenn Disk-Cache vorhanden ist

  • Anwendungsfall: Cache nur ungültig machen, wenn er bereits im Disk-Cache vorhanden ist
  • Lösung: Überprüfen Sie die Festplatte mithilfe des Parameters: NetworkPolicy.OFFLINE-Cache vor dem Abrufen

     mPicasso.with(appContext)
        .load(url)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .networkPolicy(NetworkPolicy.OFFLINE)
        .fetch(new Callback() {
            @Override
            public void onSuccess() {
                //Success: mean disk cache exist -> should do actual fetch
                picasso.load(url).fetch();
            }
    
            @Override
            public void onError() {
            //Failed: mean disk cache not exist
        }
    });
    

Picasso ist eine erstaunliche Bibliothek, ich hoffe, Squareup wird in naher Zukunft mehr Komfort-API hinzufügen, um den Cache zu verwalten.

1646247192 524 Cache in Picasso ungultig machen
Lawrence Kesteloot

Eine andere Möglichkeit besteht darin, das Cache-Verzeichnis selbst zu löschen, beispielsweise beim App-Start:

deleteDirectoryTree(context.getCacheDir());

wo:

/**
 * Deletes a directory tree recursively.
 */
public static void deleteDirectoryTree(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory()) {
        for (File child : fileOrDirectory.listFiles()) {
            deleteDirectoryTree(child);
        }
    }

    fileOrDirectory.delete();
}

Dadurch wird das gesamte Cache-Verzeichnis gelöscht, was in Ordnung ist, wenn Sie die erste Verwendung Ihrer App simulieren möchten. Wenn Sie nur den Picasso-Cache löschen möchten, fügen Sie dem Pfad “picasso-cache” hinzu.

Cache in Picasso ungultig machen
Aerilys

Was Sie tun können, wenn Sie alle Caches auf einmal löschen möchten, ist, einen benutzerdefinierten zu erstellen Picasso.LruCacheund verwenden Sie dann die clear Methode drauf.

Hier ist ein Beispiel:

Picasso.Builder builder = new Picasso.Builder(this);
LruCache picassoCache = new LruCache(this);
builder.memoryCache(picassoCache);
Picasso.setSingletonInstance(builder.build());

So leeren Sie den Cache:

picassoCache.clear();

915090cookie-checkCache in Picasso ungültig machen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy