আমি HTTP প্রতিক্রিয়াগুলি ক্যাশে করতে retrofit এবং OkHttp ব্যবহার করার চেষ্টা করছি। আমি এই টুকরোটি অনুসরণ করেছি এবং, এই কোডটি দিয়ে শেষ করেছি:
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);
এবং এটি ক্যাশে-নিয়ন্ত্রণ শিরোনামগুলির সাথে 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
);
প্রথমে আমি অনলাইনে অনুরোধ করছি এবং ক্যাশে ফাইলগুলি চেক করব। সঠিক জেএসওএন প্রতিক্রিয়া এবং শিরোনাম রয়েছে। তবে আমি যখন অফলাইনে অনুরোধ করার চেষ্টা করি তখন আমি সর্বদা পাই RetrofitError UnknownHostException
। রেট্রোফিটকে ক্যাশে থেকে প্রতিক্রিয়াটি পড়ার জন্য আমার আরও কিছু করা উচিত?
সম্পাদনা করুন:
যেহেতু OKHttp 2.0.x HttpResponseCache
হয় Cache
, setResponseCache
হয়setCache
Cache-Control: s-maxage=1209600, max-age=1209600
আমি জানি না এটি যথেষ্ট কিনা।
public
কীওয়ার্ডটিকে অফলাইনে কাজ করার জন্য প্রতিক্রিয়া শিরোনামে থাকা দরকার ছিল। তবে, এই শিরোলেখগুলি যখন উপলভ্য থাকে তখন OkClient নেটওয়ার্ক ব্যবহার করতে দেয় না। যখন উপলব্ধ থাকে তখন নেটওয়ার্ক ব্যবহারের জন্য ক্যাশে নীতি / কৌশল নির্ধারণের উপায় আছে কি?
max-stale + max-age
পাস হয়ে যায় তবে এটি নেটওয়ার্ক থেকে অনুরোধ জানায়। তবে আমি এক সপ্তাহে সর্বোচ্চ বাসি সেট করতে চাই। এটি নেটওয়ার্ক উপলব্ধ থাকলেও এটি ক্যাশে থেকে প্রতিক্রিয়া পড়তে সক্ষম করে।