Volley 为一个请求禁用缓存
Volley disable cache for one request
我想对我的所有请求使用默认的 volley 缓存策略除了一个。这可能吗?
我希望每次调用此请求时都能从互联网上获得响应。
提前致谢!
您可以通过更改方法 com.android.volley.toolbox.HttpHeaderParser.parseCacheHeaders(NetworkResponse response)
轻松禁用特定请求的缓存并忽略这些 headers,将 entry.softTtl
和 entry.ttl
字段设置为适用的任何值您并在您的请求中使用您的方法 class。这是一个例子:
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 = HttpHeaderParser.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;
}
在你这样的回复中使用这个方法
public class MyRequest extends com.android.volley.Request<MyResponse> {
...
@Override
protected Response<MyResponse> parseNetworkResponse(NetworkResponse response) {
String jsonString = new String(response.data);
MyResponse MyResponse = gson.fromJson(jsonString, MyResponse.class);
return Response.success(MyResponse, HttpHeaderParser.parseIgnoreCacheHeaders(response));
}
}
这可行:
request.setShouldCache(false);
我想对我的所有请求使用默认的 volley 缓存策略除了一个。这可能吗?
我希望每次调用此请求时都能从互联网上获得响应。
提前致谢!
您可以通过更改方法 com.android.volley.toolbox.HttpHeaderParser.parseCacheHeaders(NetworkResponse response)
轻松禁用特定请求的缓存并忽略这些 headers,将 entry.softTtl
和 entry.ttl
字段设置为适用的任何值您并在您的请求中使用您的方法 class。这是一个例子:
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 = HttpHeaderParser.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;
}
在你这样的回复中使用这个方法
public class MyRequest extends com.android.volley.Request<MyResponse> {
...
@Override
protected Response<MyResponse> parseNetworkResponse(NetworkResponse response) {
String jsonString = new String(response.data);
MyResponse MyResponse = gson.fromJson(jsonString, MyResponse.class);
return Response.success(MyResponse, HttpHeaderParser.parseIgnoreCacheHeaders(response));
}
}
这可行:
request.setShouldCache(false);