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
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
Виталий Ермолович
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:
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.
3. Speicher-Cache und Festplatten-Cache ungültig machenOffline
※ 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).
※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 machenOffline 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.
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.
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());
nach dem
Picasso.with(getActivity()).invalidate(file);
wie kann ich wieder cachen?– Smoking-Welt
31. Mai 2017 um 12:20 Uhr