我在网络请求中使用了带有okhttp_3库的retrofit_2(beta4)。并且我需要缓存响应数据,以满足网络关闭的情况,并且应用程序必须显示来自上一个相同请求的响应数据。我找到的解决这个问题的所有指南都是使用okhttp lib(而不是okhttp_3)。我试图解决问题:
public class ApiFactory {
private static final int CONNECT_TIMEOUT = 45;
private static final int WRITE_TIMEOUT = 45;
private static final int READ_TIMEOUT = 45;
private static final long CACHE_SIZE = 10 * 1024 * 1024; // 10 MB
private static OkHttpClient.Builder clientBuilder;
static {
clientBuilder = new OkHttpClient
.Builder()
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.cache(new Cache(MyApp.getInstance().getCacheDir(), CACHE_SIZE)) // 10 MB
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (MyApp.getInstance().isNetwConn()) {
request = request.newBuilder().header("Cache-Control", "public, max-age=" + 60).build();
} else {
request = request.newBuilder().header("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 24 * 7).build();
}
return chain.proceed(request);
}
});
}
@NonNull
public static ApiRequestService getApiRequestService() {
return getRetrofitDefault().create(ApiRequestService.class);
}
@NonNull
private static Retrofit getRetrofitDefault() {
return new Retrofit.Builder()
.baseUrl(NetworkUrls.URL_MAIN)
.addConverterFactory(GsonConverterFactory.create())
.callbackExecutor(Executors.newFixedThreadPool(5))
.callbackExecutor(Executors.newCachedThreadPool())
.callbackExecutor(new Executor() {
private final Handler mHandler = new Handler(Looper.getMainLooper());
@Override
public void execute(Runnable command) {
mHandler.post(command);
}
})
.client(clientBuilder.build())
.build();
}
}
但这不起作用。当网络处于打开状态时,所有请求都能正常工作,但当网络处于关闭状态时,它们不能返回缓存数据。拜托,帮忙解决这个问题。
用作
File cacheDir = new File(MyApplication.getContext().getCacheDir(), cache);
myCache= new Cache(cacheDir, cacheSize);
okHttpClient = new OkHttpClient();
okHttpClient.setCache(myCache);
我正在使用reverfit2调用一个微服务,它在PUT方法上返回一个200和一个空的响应体。但是,reverfit 2似乎无法处理这一点,并且在“enqueue”中转到onFailure分支 @override public void onFailure(Call Call,Throwable t){ 以下是日志: 有人知道这是什么原因造成的吗?因为请求被成功地提供了(见上文)。
本文向大家介绍android Retrofit2+okHttp3使用总结,包括了android Retrofit2+okHttp3使用总结的使用技巧和注意事项,需要的朋友参考一下 使用前准备 Build.gradle文件配置 dependencies配置 网络框架搭建 服务创建类封装(HTTP): 使用说明: API_BASE_URL 用来配置api主地址 READ_TIMEOUT 用来配置读取超
问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程
问题内容: 我使用一些GeoIP服务在页面上放置国家/地区标记,具体取决于国家/地区IP。我需要为网站上的所有页面缓存JSON响应。 将此代码放入: 是否可以将其缓存?-似乎不起作用。 或者使用HTML5 localStorage可能更好,但是我不确定该怎么做。 我也尝试了JSONCache插件,但是对我来说不起作用。 问题答案: 您可以这样使用localStorage: 演示 因此,在您的特定情
我也得到了200的回复,但没有身体的数据
我调用服务器数据通过使用ajax在index.html.它是完美的获取这些数据。现在,我正在和服务人员一起工作。我可以缓存所有的静态资产(图像,js,css),并在Chrome开发工具的应用程序选项卡中的缓存存储中检查这些缓存的资产。我可以在网络选项卡中看到这些资产也被缓存(磁盘缓存)。 现在,我想使用ServiceWorker缓存这些ajax响应(图像文件数组)。在“网络”选项卡中,我可以看到它