2015-07-22 5 views
3

Я хочу использовать политику кэша по умолчанию для волейбола для всех моих запросов кроме одного. Это возможно?Волейбол отключить кеш для одного запроса

Я хотел бы получить ответ из Интернета каждый раз, когда вызывается этот запрос.

Спасибо заранее!

ответ

2

Вы можете легко отключить кэш для конкретного запроса путем изменения метода com.android.volley.toolbox.HttpHeaderParser.parseCacheHeaders(NetworkResponse response) и игнорировать эти заголовки, установите entry.softTtl и entry.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)); 
} 

} 
10

Это будет работать:

request.setShouldCache(false); 
Смежные вопросы