webentwicklung-frage-antwort-db.com.de

Wie wird der Volley-Cache automatisch gelöscht?

Ich möchte die Anforderungswarteschlange beispielsweise alle 30 Minuten löschen.

Was ist der beste Weg, um den Volley-Cache automatisch zu löschen?

Überschreiben von Methoden durch Erweitern der Volley-Cache-Klasse?

Oder einen Timer erstellen, der den Cache jedes Mal löscht, wenn ich brauche?

11
JohnnyBeGoody

Google Volley bietet zwei Möglichkeiten, ein Element aus dem Cache zu löschen:

AppController.getInstance().getRequestQueue().getCache().remove(key);

und

AppController.getInstance().getRequestQueue().getCache().invalidate(key, fullExpire);

Remove bedeutet, dass Sie die tatsächlich zwischengespeicherten Daten entfernen.

Invalidate bedeutet, dass Sie die Daten nur als ungültig markieren. Volley überprüft also beim Server, ob die Daten noch gültig sind. Der full - Ablauf bestimmt, ob die Daten verwendet werden sollen, bevor volley sie beim Server überprüft hat.

Verwenden Sie den folgenden Code, um den Cache alle 30 Minuten zu löschen: -

sie können das Volley serverDate verwenden, um das Datum zu erhalten, an dem die Antwort ursprünglich als empfangen wurde

AppController.getInstance().getRequestQueue().getCache().get(url).serverDate

Verwenden Sie also in Ihrem Code getMinutesDifference als Funktion

  public static long getMinutesDifference(long timeStart,long timeStop){
            long diff = timeStop - timeStart;
            long diffMinutes = diff / (60 * 1000);

            return  diffMinutes;
        }

und Rufen Sie diese Funktion in Ihrem Code auf als

Calendar calendar = Calendar.getInstance();
long serverDate = AppController.getInstance().getRequestQueue().getCache().get(url).serverDate;
if(getMinutesDifference(serverDate, calendar.getTimeInMillis()) >=30){
   AppController.getInstance().getRequestQueue().getCache().invalidate(url, true);
}

Der Cache wird ungültig, wenn die vorherige URL-Antwort> = 30 Minuten ist.

19
Giru Bhai

Der einfachste Weg, dies zu tun, besteht darin, die Methode onRequestFinished zu überschreiben und den Cache zu löschen. Oder Sie können nach 30 Minuten im Timer laufen.

final RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);

requestQueue.addRequestFinishedListener(new RequestQueue.RequestFinishedListener<Object>() {
            @Override
            public void onRequestFinished(Request<Object> request) {
                requestQueue.getCache().clear();
            }
        });

Ich habe versucht, die Bitmap mithilfe von remove(key) aus dem Cache zu entfernen, aber es funktionierte nicht. Daher habe ich die von putBitmap(String url, Bitmap bitmap) empfangene Scheck-URL erhalten. Ich habe festgestellt, dass die URL ein Präfix wie #W0#H#S7http... hat, da der Volleyball-Aufruf getCacheKey(String url, int maxWidth, int maxHeight, ScaleType scaleType) für jede URL aufgerufen wird. SO Wenn Sie die URL aus dem Cache entfernen möchten, müssen Sie diese Funktion auch aufrufen, um den Schlüssel für die URL zu erhalten.

 String key = mImageLoader.getCacheKey(url, 0, 0, ImageView.ScaleType.CENTER_INSIDE);

 mRequestQueue.getCache().remove(key);

Übergeben Sie 0,0 and ImageView.ScaleType.CENTER_INSIDE, wenn Sie imageLoader.get(String requestUrl,ImageLoader.ImageListener listener) verwenden. Andernfalls können Sie die minimale Höhe und Breite sowie den verwendeten Skalentyp übergeben.

NOTEgetCacheKey() ist eine private Funktion der ImageLoader-Klasse. Sie müssen sie in public ändern, um sie in Ihrer App verwenden zu können.

0
Jaiprakash Soni