HTTP yanıtlarını önbelleğe almak için Retrofit & OKHttp'yi kullanmaya çalışıyorum. Bu özü takip ettim ve şu kodu aldım :
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);
Ve bu, Cache-Control başlıklarına sahip MyApi
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
);
Önce çevrimiçi talep ediyorum ve önbellek dosyalarını kontrol ediyorum. Doğru JSON yanıtı ve üstbilgiler var. Ancak çevrimdışı talep etmeye çalıştığımda her zaman alıyorum RetrofitError UnknownHostException. Retrofit'in önbellekten gelen yanıtı okumasını sağlamak için yapmam gereken başka bir şey var mı?
DÜZENLEME:
OKHttp 2.0.x yana HttpResponseCacheolduğunu Cache, setResponseCacheolupsetCache