Как использовать кэшированные данные в моем приложении? - PullRequest
0 голосов
/ 04 февраля 2019

Как кэшировать данные списка (изображения и имена) при модернизации?Любой подходящий пример для кэширования данных будет более полезным?

1 Ответ

0 голосов
/ 04 февраля 2019

ки.Прежде всего, вы должны проверить заголовки, приходящие в ваш API через почтальона.Там вы увидите заголовок «Cache-Control».В этом заголовке должно быть публичное значение кэша, если вы хотите кэшировать этот API.Вот код:

В вашем классе ApiClient.class, где вы сохранили свой базовый URL, сделайте этот метод:

public static CacheControl getCacheControl(CachePolicy cachePolicy) {
   switch (cachePolicy) {
       case CACHE_ONLY:
           return CacheControl.FORCE_CACHE;
       case NETWORK_ONLY:
           return CacheControl.FORCE_NETWORK;

       case NETWORK_ELSE_CACHE:
           return new CacheControl.Builder().maxAge(1, TimeUnit.MINUTES).maxStale(1, TimeUnit.MINUTES).build();

       case FRESH_CASHE_ELSE_NETWORK:
           return new CacheControl.Builder().maxAge(1, TimeUnit.MINUTES).minFresh(1, TimeUnit.MINUTES).build();


       case CACHE_ELSE_NETWORK:
          return new CacheControl.Builder().immutable().build();

   }
   return null;

}

Теперь создайте класс enum для сохраненияэти константы:

 public enum CachePolicy {
 CACHE_ONLY,
 NETWORK_ONLY,
 NETWORK_ELSE_CACHE,
 FRESH_CASHE_ELSE_NETWORK,
 CACHE_ELSE_NETWORK
 }

Вставьте этот метод в ваш класс ApiClient с вашим базовым URL:

public static Retrofit getClientAuthenticationWithCache(Context context, CacheControl
       cacheControl) {
   String URL_BASE = "your base url";
   long cacheSize = 10 * 1024 * 1024;  //10MiB
   Cache cache = new Cache(context.getCacheDir(), cacheSize);



   Interceptor interceptor = new Interceptor() {
       @Override
       public Response intercept(Chain chain) throws IOException {
           Request request = chain.request();
           request = request.newBuilder().cacheControl(cacheControl).build();
           return chain.proceed(request);
       }
   };

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

   Retrofit.Builder builder = new Retrofit.Builder()
           .baseUrl(URL_BASE)
           .client(okHttpClient)
           .addConverterFactory(GsonConverterFactory.create());

   return builder.build();

}

Теперь используйте этот метод в упражнении / фрагменте, гдеВы получаете ответ следующим образом:

ApiClient.getClient(applicationContext, ApiClient.getCacheControl(CachePolicy.NETWORK_ELSE_CACHE)).create(ApiInterface::class.java)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...