24小时后,Retrofit缓存会自动过期

问题描述 投票:0回答:1

我正在尝试创建一个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();
    }

}
android retrofit
1个回答
0
投票

希望这可以帮助。 1)尝试强制缓存控制

 .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

© www.soinside.com 2019 - 2024. All rights reserved.