Volley禁用缓存的单个请求

3
我希望为所有请求使用Volley的默认缓存策略,除了一个请求。这可行吗?
每次调用此请求时,我想从互联网获取响应。
谢谢!
2个回答

10

这样做是可行的:

request.setShouldCache(false);

2

您可以通过更改方法com.android.volley.toolbox.HttpHeaderParser.parseCacheHeaders(NetworkResponse response)来禁用特定请求的缓存,并忽略这些头信息,将entry.softTtlentry.ttl字段设置为适合您的任何值,并在您的请求类中使用您的方法。以下是一个示例:

 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));
}

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接