我正在使用Volley库,我无法正确设置缓存。
服务器发送给我json对象,expiration和ETAg ..我想Voley在缓存中保存这个对象,并在下一个请求中使用该对象请求到服务器,包括标题中的ETag。如果响应将是304 Not Modified,那么它应该使用缓存资源,如果它将是200 OK,它应该使用来自服务器的新资源。
我正在通过Fidler观看通信,我可以看到Volley根本不发送请求(如果缓存未过期),或者如果它已过期,它会发送带有If-None-Match + etag字符串的新请求..和服务器始终响应200ok
答案 0 :(得分:0)
如果要对每个请求重新验证,则应将max age设置为0,以使缓存条目始终过期。
如果服务器始终以200 OK响应,请检查服务器中的原因,因为如果请求具有正确的Etag与volley无关。
答案 1 :(得分:0)
我意识到当我使用
时BasicHttpClient httpClient = new BasicHttpClient();
httpClient.addHeader("If-None-Match", "vENFxg");
它总是返回200。
但如果我使用
httpClient.addHeader("If-None-Match", "\"vENFxg\"");
它有效,我得到304(HTTP_NOT_MODIFIED)。
你可以在下面用排球试试。
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
mHeaders = new HashMap<String, String>();
mHeaders.put("If-None-Match", "\"vENFxg\"");
return mHeaders;
}
让我知道是否有效。
我假设您在应用中的某个位置存储了凌空响应,因为您需要etag。
在这种情况下,我更愿意将etag保存在某个地方(比如Preferences)。 我确实使用了一些简单的请求。
Volley的演讲中还提到“在后台进行同样的操作时,排球非常精细。但它在UI和网络的交叉点上确实很出色。但它并不适合所有事情。”
抱歉,我的英语很差。