2016-04-12 3 views
1

Я создаю приложение для Android, которое извлекало все его данные из веб-службы. И я использую Okhttp как сетевой слой. Я могу установить размер кэша okhttp, но я хочу установить устаревшее время, после которого okhttp извлекает данные с сервера, иначе извлекает их из локального кеша.Как установить время простоя для OkHttp Android?

Всякий раз, когда я нажимаю и выхожу из приложения. После перезагрузки он снова отправляется на получение данных с сервера. Возможно ли получить данные из локального кеша для устаревшего времени, например, 15 минут? И по прошествии 15 минут пользователь снова запускает приложение, затем данные поступают с сервера.

ответ

2

Вы можете попробовать использовать Cache-Control: max-age= 900 в ответ на ваш запрос. Таким образом вы сообщаете OkHttp для кэширования этого ответа в течение 15 минут (900 секунд).

Подробнее об этом можно узнать here.

Если вы хотите сделать это программно на конце устройства, вы можете переписать ответ с использованием перехватчиков. Используйте его так:

private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() { 
@Override public Response intercept(Interceptor.Chain chain) throws IOException { 
    Response originalResponse = chain.proceed(chain.request()); 
    return originalResponse.newBuilder() 
     .header("Cache-Control", "max-age=900") 
     .build(); 
    } 
}; 

Добавьте это к вашему клиенту OkHttp при ее создании:

OkHttpClient client = new OkHttpClient.Builder() 
    .addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) 
    .build(); 

Вы хорошо идти!

+0

Как это сделать программно? Есть ли какой-либо метод, доступный в классе com.squareup.okhttp.Response, чтобы сделать это или есть другой способ? – Passiondroid

+0

@Passiondroid, проверьте мой обновленный ответ. –

+0

Спасибо за информацию, но проблема в том, что я использую OkHttp 2.7.0, и я не могу найти способ добавить к нему перехватчики. – Passiondroid

Смежные вопросы