2016-10-31 7 views
1

Im using Retrofit2 & OKHTTP3 для REST API в моем приложении для Android. Мое требование - я должен кэшировать запросы на использование приложения в автономном режиме. Дело в том, что я способен кэшировать запросы. Но когда пользователь снова подключается к сети, данные должны извлекаться только из бэкэнд, он не должен обслуживать кешированный ответ. Как я могу это достичь. Ниже моя сеть перехватчикКэширование сетевых запросов с Okhttp3.0 и retrofit2

Сеть перехватчик

public class CachingInterceptor implements Interceptor { 
    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request = chain.request(); 


      if (Util.isOnline()) { 
       request = request.newBuilder() 
         .header("Cache-Control", "only-if-cached") 
         .build(); 
      } else { 
       request = request.newBuilder() 
         .header("Cache-Control", "public, max-stale=2419200") 
         .build(); 
      } 

     Response response= chain.proceed(request); 
     return response.newBuilder() 
       .header("Cache-Control", "max-age=86400") 
       .build(); 
    } 
} 

ответ

0

Понял. Если устройство находится в автономном режиме, я устанавливаю заголовок Cache-Control как «public, only-if-cached, max-stale = 86400» (Это установит устаревшее время до 1 дня). Теперь, если устройство подключено к сети, оно будет загружаться только с сервера.

OkHttpClient

okHttpClient = new OkHttpClient.Builder() 
      .addInterceptor(new OfflineCachingInterceptor()) 
      .cache(cache) 
      .build(); 

OfflineCachingInterceptor

public class OfflineCachingInterceptor implements Interceptor { 
    @Override 
    public Response intercept(Chain chain) throws IOException { 

     Request request = chain.request(); 
     //Checking if the device is online 
     if (!(Util.isOnline())) { 
      // 1 day stale 
      int maxStale = 86400; 
      request = request.newBuilder() 
        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) 
        .build(); 
     } 

     return chain.proceed(request); 
    } 
} 
0

См этот ответ link OkHttp перехватчик является правильным способом получить доступ к кэшу в автономном режиме:

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