如何为 OkHttp Android 设置 Stale 时间?
How to set Stale time for OkHttp Android?
我正在创建一个 android 应用程序,它从网络服务中获取所有数据。
我正在使用 Okhttp 作为网络层。我可以设置 okhttp 的缓存大小,但我想设置 okhttp 从服务器获取数据之前的陈旧时间,否则从本地缓存获取数据。
每当我按返回退出应用程序时。重新启动后,它再次从服务器获取数据。是否可以从本地缓存中获取 15 分钟等过时时间的数据? 15 分钟后,用户再次启动应用程序,然后数据来自服务器。
您可以尝试在请求的响应中使用 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();
一切顺利!
我正在创建一个 android 应用程序,它从网络服务中获取所有数据。 我正在使用 Okhttp 作为网络层。我可以设置 okhttp 的缓存大小,但我想设置 okhttp 从服务器获取数据之前的陈旧时间,否则从本地缓存获取数据。
每当我按返回退出应用程序时。重新启动后,它再次从服务器获取数据。是否可以从本地缓存中获取 15 分钟等过时时间的数据? 15 分钟后,用户再次启动应用程序,然后数据来自服务器。
您可以尝试在请求的响应中使用 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();
一切顺利!