मैं Retrofit 1.9.0
और OkHtttp 2.5.0
के साथ कैश को कॉन्फ़िगर करने का प्रयास कर रहा हूं।रेट्रोफिट + आरएक्सजेवा प्रतिक्रियाओं को कैश करने में विफल रहता है, संदिग्ध प्रतिक्रिया शीर्षलेख
यहाँ है कैसे मैं अपने RestAdapter
के लिए OkHttpClient
प्रदान करते हैं:
@Provides
@Singleton
public OkHttpClient provideOkHttpClient() {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setConnectTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
okHttpClient.setReadTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
okHttpClient.setWriteTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
File cacheDir = new File(context.getCacheDir(), "http");
final Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE_IN_BYTES);
okHttpClient.setCache(cache);
okHttpClient.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(request);
Response finalResponse = response.newBuilder()
.header("Cache-Control", String.format("public, max-stale=%d", 604800))
.build();
Log.d("OkHttp", finalResponse.toString());
Log.d("OkHttp Headers", finalResponse.headers().toString());
return finalResponse;
}
});
return okHttpClient;
}
मैं RestAdapter.Builder
पर setClient
भूल नहीं की। यह भी सुनिश्चित किया गया है कि, मैं वास्तव में इस क्लाइंट सेट के साथ RestAdapter
का उदाहरण उपयोग कर रहा हूं।
यहां तक कि जांच की गई है कि फाइलें "http" फ़ोल्डर के अंतर्गत बनाई गई हैं या नहीं। वो हैं।
हालांकि बाद मैं वाईफ़ाई की बारी और अपनी स्क्रीन को फिर से लोड मैं इस संदेश के साथ Observable
endpoint की OnError
कॉलबैक में अंत:
retrofit.RetrofitError: failed to connect to /10.40.31.12 (port 8888) after 10000ms: connect failed: ENETUNREACH (Network is unreachable)
अस्वीकरण: मैं शायद यह है कि अंतिम Observable
5 दूसरों से संयुक्त है उल्लेख करना चाहिए, रास्ते पर flatMap
और zip
के साथ।
संभावित डुप्लिकेट [ऑफ़लाइन होने पर ओकेएचटीपी उपयोग कैश डेटा के साथ रेट्रोफिट कर सकते हैं] (http://stackoverflow.com/questions/23429046/can-retrofit-with-okhttp-use-cache-data-when-offline) – njzk2