J'essaie d'obtenir Volley
de travailler en utilisant son Cache
. Lorsque je reçois un 304
getCacheEntry().data
est null
même si "cache-control"
est défini. Voici ce que je fais:Volley Cache renvoie null lors de la réception 304
Volley
obtient instancié aime ce// Instantiate the cache Cache cache = new DiskBasedCache(c.getCacheDir(), 10 * 1024 * 1024); // 10 MB cap // Set up the network to use HttpURLConnection as the HTTP client. Network network = new BasicNetwork(new HurlStack()); // Instantiate the RequestQueue with the cache and network. mRequestQueue = new RequestQueue(cache, network); // Start the queue mRequestQueue.start();
Après l'envoi d'une requête GET je reçois la réponse
200
avec"cache-control"
ensemble à"max-age=180, public"
. Jusqu'ici tout va bien?- Si une demande GET est effectuée deux fois ou plus, j'ai défini
"If-Modified-Since"
avec le dernier horodatage de la demande à l'en-tête de la demande. - La deuxième fois que je demande un point de terminaison API spécifique, le serveur répond avec un
304
.getCacheEntry().data
renvoie cependantnull
. Si je vérifie lecache entries
dansVolleys
RequestQueue
je ne peux pas trouver une entrée pour ma demande spécifique.
Qu'est-ce que je fais mal? Pour une raison quelconque, j'ai une requête qui est toujours mise en cache une fois déclenchée. C'est même un qui renvoie beaucoup de données. Mais toutes les autres demandes ne sont pas mises en cache. L'extrait de code suivant analyse la réponse et vérifie 304
.
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response, String charset) {
try {
String json = "";
if (!response.notModified) {
json = new String(response.data, charset);
} else {
//if not modified -> strangely getCacheEntry().data always null
json = new String(getCacheEntry().data, charset);
}
return Response.success(
gson.fromJson(json, clazz),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
J'apprécie vraiment tous les commentaires à ce sujet.
Si votre demande est une demande POST, IMO, vous pouvez lire ce qui suit http://stackoverflow.com/questions/21953519/volley-exception-error-when-response-code-304-and-200 – BNK
Merci @BNK C'est une demande GET si – Ben
Si le serveur est publié dans Internet, pls poster l'URL afin que je puisse vérifier demain – BNK