我正在使用Volley请求,我需要缓存我的json值。我读了this链接我做到了它有效,但有一个问题。
我有一个listView项目是item1和item2。当我点击item1时它会缓存json,当我点击item2时它会从缓存中返回。结果是它只显示item1值。我应该在这里更改什么,以便缓存是正确的。
public static Cache.Entry parseIgnoreCacheHeaders(NetworkResponse response) {
long now = System.currentTimeMillis();
Map<String, String> headers = response.headers;
long serverDate = 0;
String serverEtag = null;
String headerValue;
headerValue = headers.get("Date");
if (headerValue != null) {
serverDate = parseDateAsEpoch(headerValue);
}
serverEtag = headers.get("ETag");
final long cacheHitButRefreshed = 3 * 60 * 1000; // in 3 minutes cache will be hit, but also refreshed on background
final long cacheExpired = 24 * 60 * 60 * 1000; // in 24 hours this cache entry expires completely
final long softExpire = now + cacheHitButRefreshed;
final long ttl = now + cacheExpired;
Cache.Entry entry = new Cache.Entry();
entry.data = response.data;
entry.etag = serverEtag;
entry.softTtl = softExpire;
entry.ttl = ttl;
entry.serverDate = serverDate;
entry.responseHeaders = headers;
return entry;
}
答案 0 :(得分:0)
对于缓存来说,使用VolleyExtended很有用:eu.the4thfloor.volleyextended有更新的Response侦听器,你可以在其中获得额外的布尔值更改,这意味着如果响应与缓存中的最后一个响应不同。在错误响应时,还有其他参数响应(缓存),您可以在服务器或网络外出时使用它。当然,如果它只是缓存。当然,缓存依赖于从服务器发送的max-age参数。但是你可以根据自己的意愿在排球中更新这个
private class ResponseListenerYYY extends Api.ResponseListener {
@Override
public void onResponse(String response, boolean changed) {
}
@Override
public void onErrorResponse(VolleyError error, String response) {
}
}