時返回null,我試圖讓Volley
利用其Cache
工作。當我收到304
時getCacheEntry().data
爲null
即使"cache-control"
已設置。下面是我在做什麼:凌空緩存接收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請求後,我得到
"cache-control"
設置爲"max-age=180, public"
響應200
。到目前爲止這麼好嗎?- 如果獲得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
Thanks @BNK這是一個GET請求,雖然 – Ben
如果服務器在互聯網上發佈,請發佈的URL,以便我可以檢查明天 – BNK