Sto cercando di utilizzare Retrofit e OKHttp per memorizzare nella cache le risposte HTTP. Ho seguito questa sintesi e ho finito con questo codice:
File httpCacheDirectory = new File(context.getCacheDir(), "responses");
HttpResponseCache httpResponseCache = null;
try {
httpResponseCache = new HttpResponseCache(httpCacheDirectory, 10 * 1024 * 1024);
} catch (IOException e) {
Log.e("Retrofit", "Could not create http cache", e);
}
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setResponseCache(httpResponseCache);
api = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(okHttpClient))
.build()
.create(MyApi.class);
E questo è MyApi con le intestazioni Cache-Control
public interface MyApi {
@Headers("Cache-Control: public, max-age=640000, s-maxage=640000 , max-stale=2419200")
@GET("/api/v1/person/1/")
void requestPerson(
Callback<Person> callback
);
Prima richiedo online e controllo i file della cache. Ci sono le risposte e le intestazioni JSON corrette. Ma quando provo a richiedere offline, ottengo sempre RetrofitError UnknownHostException
. C'è qualcos'altro che dovrei fare per fare in modo che Retrofit legga la risposta dalla cache?
EDIT:
poiché OKHttp 2.0.x HttpResponseCache
è Cache
, lo setResponseCache
èsetCache
Cache-Control: s-maxage=1209600, max-age=1209600
non so se sia abbastanza.
public
parola chiave fosse necessaria per essere nell'intestazione della risposta per farlo funzionare offline. Ma queste intestazioni non consentono a OkClient di utilizzare la rete quando è disponibile. Esiste un modo per impostare la politica / strategia della cache per utilizzare la rete quando disponibile?
max-stale + max-age
viene passato, lo richiede dalla rete. Ma voglio impostare max-stantio a settimana. Questo rende la lettura della risposta dalla cache anche se è disponibile una rete.