Срок службы кеша истекает через 24 часа - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать приложение для Android, которое будет извлекать данные из Интернета с помощью Retrofit.Я сделал модифицированную систему кеширования тоже.Я работаю нормально в течение 24 часов, так как приложение перешло в автономный режим, но через 24 часа все сохраненные данные кэша теряют силу.Я даже изменил срок действия внутреннего кода с 60 * 60 * 20 (1 день) на 60 * 60 * 24 * 185 (185 дней) .Есть ли решение?

public class RetrofitInstance {
    private static final String BASE_URL = "DOMAIN_HERE";

    public static Retrofit getRetrofit(Context context)
    {
            File httpCacheDirectory = new File(context.getCacheDir(), "httpCache");
            Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);

            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .cache(cache)
                    .addInterceptor(chain -> {
                        try {
                            return chain.proceed(chain.request());
                        } catch (Exception e) {
                            Request offlineRequest = chain.request().newBuilder()
                                    .header("Cache-Control", "public, only-if-cached," +
                                            "max-stale=" + 60 * 60 * 24 * 185)
                                    .build();
                            return chain.proceed(offlineRequest);
                        }
                    })
                    .build();

        return new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(new Gson()))
            .client(httpClient)
            .baseUrl(BASE_URL)
            .build();
    }

}

1 Ответ

0 голосов
/ 03 октября 2018

Надеюсь, это поможет.1) Попробуйте принудительно установить Cache-control

 .cacheControl(CacheControl.FORCE_CACHE)

после

 Request offlineRequest = chain.request().newBuilder()

или 2)

 Request request = new Request.Builder()
   .cacheControl(new CacheControl.Builder()
       .maxStale(365, TimeUnit.DAYS)
         .build();

Документация: https://square.github.io/okhttp/3.x/okhttp/okhttp3/Cache.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...