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 HttpResponseCache
olduğunu Cache
, setResponseCache
olupsetCache