¿Cómo borrar el caché de volley automáticamente?

Quiero borrar la cola de solicitudes cada 30 minutos, por ejemplo.

Entonces, ¿cuál es la mejor manera de limpiar el caché de volley automáticamente?

¿Anula los métodos al extender la clase de caché de volley?

¿O crear un temporizador que borrará el caché cada vez que lo necesite?

Google Volley ofrece dos formas de borrar un elemento de la memoria caché:

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

y

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

Eliminar significa que está eliminando los datos almacenados en caché.

Invalidar significa que solo está marcando los datos como no válidos. Entonces volley verificará con el servidor si los datos aún son válidos. La caducidad completa determina si se deben usar los datos antes de que la descarga lo haya validado con el servidor.

Para borrar el caché en cada 30 minutos use el siguiente código: –

puede usar serverDate de voley para obtener la fecha de cuando la respuesta se recibió originalmente como

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

Entonces en tu código usa la función getMinutesDifference como

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

y llame a esta función en su código como

 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); } 

Invalidará el caché, si la respuesta del url anterior es> = 30 minutos.

Intentaba eliminar el bitmap de la memoria caché utilizando remove(key) pero no funcionaba, por lo que he recibido la URL de verificación recibida por putBitmap(String url, Bitmap bitmap) . Encontré que url tiene un prefijo como #W0#H#S7http... esto se debe a que voley llama a getCacheKey(String url, int maxWidth, int maxHeight, ScaleType scaleType) para cada url. ASÍ QUE, si desea eliminar la URL de la memoria caché, también debe llamar a esta función para obtener la clave de la url.

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

Pase 0,0 and ImageView.ScaleType.CENTER_INSIDE si está utilizando imageLoader.get(String requestUrl,ImageLoader.ImageListener listener) else pase el alto y ancho mínimo y el tipo de escala que está utilizando.

NOTA getCacheKey() es una función privada de la clase ImageLoader, por lo que debe cambiarla a pública para usarla dentro de su aplicación.

La forma más fácil de hacerlo es anular el método Requerido finalizado y borrar el caché. O puede ejecutar dentro del temporizador después de 30 min.

 final RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); requestQueue.addRequestFinishedListener(new RequestQueue.RequestFinishedListener() { @Override public void onRequestFinished(Request request) { requestQueue.getCache().clear(); } });