Я использую retrofit 2 и OkHttp3 для запроса данных с сервера. Я просто добавил автономный кеш-код, но он работает не так, как ожидалось. Я получил сообщение об ошибке «Не удалось разрешить хост» <> «: Нет адреса, связанного с именем хоста».Получил эту ошибку с помощью retrofit2 & OkHttp3. Не удалось разрешить хост «<host-name>»: адрес, связанный с именем хоста
Это происходит, когда он пытается получить данные из кеша (при отсутствии подключения к Интернету). Ниже приведен фрагмент кода.
public static Interceptor provideCacheInterceptor() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
// re-write response header to force use of cache
CacheControl cacheControl = new CacheControl.Builder()
.maxAge(2, TimeUnit.MINUTES)
.build();
return response.newBuilder()
.header(CACHE_CONTROL, cacheControl.toString())
.build();
}
};
}
public static Interceptor provideOfflineCacheInterceptor() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!hasNetwork) {
CacheControl cacheControl = new CacheControl.Builder()
.onlyIfCached()
.maxStale(7, TimeUnit.DAYS)
.build();
request = request.newBuilder()
.removeHeader("Pragma")
.cacheControl(cacheControl)
.build();
}
return chain.proceed(request);
}
};
}
private static Cache provideCache() {
Cache cache = null;
try {
cache = new Cache(new File(AdeptAndroid.getInstance().getCacheDir(), "http-cache"),
10 * 1024 * 1024); // 10 MB
} catch (Exception e) {
Log.d("Test", "Could not create Cache!");
}
return cache;
}
И, наконец, метод, который сочетает в себе все это.
private static OkHttpClient provideOkHttpClient() {
return new OkHttpClient.Builder()
.addInterceptor(provideHttpLoggingInterceptor())
.addInterceptor(provideOfflineCacheInterceptor())
.addNetworkInterceptor(provideCacheInterceptor())
.cache(provideCache())
.build();
}
Настройка заголовка таким образом (ровно 50000) решила проблему. .header («Cache-Control», String.format («max-age =% d», 50000)) –
@WaqarYounis Спасибо за ответ, но он не работает. –
Вы решили эту проблему? У меня есть эта проблема при пробуждении приложения из фона с помощью GCM. –