Я пытаюсь получить Volley
для работы с его Cache
. Когда я получаю 304
getCacheEntry().data
является null
, хотя "cache-control"
установлен. Вот что я делаю:Volley Cache возвращает null при получении 304
Volley
получает экземпляр любит этот// 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();
После отправки запроса GET я получаю ответ
200
с"cache-control"
набором для"max-age=180, public"
. До сих пор так хорошо?- Если запрос GET делается дважды или более, я установил
"If-Modified-Since"
с последней меткой времени, запрошенной в заголовок запроса. - Второй раз, когда я запрашиваю конкретную конечную точку API, сервер ответит
304
.getCacheEntry().data
возвращаетnull
. Если я проверилcache entries
вVolleys
RequestQueue
Я не могу найти запись для моего конкретного запроса.
Что я делаю неправильно? По какой-то причине у меня есть один запрос, который всегда кэшируется при однократном запуске. Это даже один, который возвращает много данных. Но все остальные запросы не кэшируются. Следующий фрагмент кода анализирует ответ и проверяет наличие 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));
}
}
Я действительно ценю любые комментарии по этому вопросу.
Если ваш запрос является POST-запросом, IMO вы можете прочитать следующее http://stackoverflow.com/questions/21953519/volley-exception-error-when-response-code-304-and-200 – BNK
Спасибо @BNK это запрос GET, хотя – Ben
Если сервер опубликован в Интернете, pls отправляет URL-адрес, чтобы я мог проверить завтра – BNK