Я делаю POST-запросы на свой сервер с помощью OkHttp. Это прекрасно работает. Теперь я хочу использовать кеш OkHttp для кэширования ответов на запросы и использовать их, когда устройство находится в автономном режиме. Я пробовал много решений из других вопросов, но никто из них не работает.Кэш-запросы POST с OkHttp
Я использую OkHttp 2.5.0
С кодом ниже, я получаю правильный ответ, когда устройство имеет доступ в Интернет. Но если я выключу интернет, он выбросит java.net. UnknownHostException
: Невозможно, чтобы решить множество «example.com»: Нет адрес, связанный с именем хоста
Вот мой текущий код, который не работает:
перехватчик для перезаписи заголовков кэша:
private final Interceptor mCacheControlInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (isOnline()) {
request.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=7887")
.build();
} else {
request.newBuilder()
.header("Cache-Control", "public, max-stale=2419200")
.build();
}
Response response = chain.proceed(request);
// Re-write response CC header to force use of cache
return response.newBuilder()
.header("Cache-Control", "public, max-age=86400") // 1 day
.build();
}
};
метод, чтобы получить клиента:
private OkHttpClient getHttpClient() {
if (mHttpClient == null) {
mHttpClient = new OkHttpClient();
mHttpClient.setConnectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);
File cacheDir = mContext.getDir(CACHE_NAME, Context.MODE_PRIVATE);
mHttpClient.setCache(new Cache(cacheDir, CACHE_SIZE));
mHttpClient.networkInterceptors().add(mCacheControlInterceptor);
}
return mHttpClient;
}
Сделать запрос:
RequestBody body = RequestBody.create(TEXT, data);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = getHttpClient().newCall(request).execute();
... или использовать запросы GET. –
Можете ли вы показать мне какие-либо документы или официальные заметки об этом? – droidev
@JesseWilson прав, здесь у вас есть ссылка на код, который игнорирует любой другой глагол, что это не GET: [okhttp3/Cache.java # L230] (https://github.com/square/okhttp/blob/master /okhttp/src/main/java/okhttp3/Cache.java#L230]) – Juancho