我不知道在没有围绕Retrofit构建包装器的情况下是否可行。 我希望我的请求通过回调2次,一次使用缓存/磁盘响应,一次通过网络(如果可用)。
目前我使用自定义的okHttpClient和自定义拦截器如下:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(new Cache()).build();
这是Cache拦截器
public class Cache implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (request.method().equals("GET")) {
if (Network.isConnected()) {
Response response = chain.proceed(request);
byte[] buffer = response.body().bytes();
NetworkCache.cacheResponse(request, buffer);
return new Response.Builder()
.code(response.code())
.request(request)
.protocol(response.protocol())
.headers(response.headers())
.body(ResponseBody.create(MediaType.parse(RestClient.MEDIA_TYPE), buffer))
.build();
} else {
Response cachedResponse = NetworkCache.getResponse(request);
if (cachedResponse != null) {
return cachedResponse;
}
}
}
return chain.proceed(request);
}
}
它可以工作,但只有在设备离线时才会触发我的缓存响应(此代码除外)。现在我希望有机会响应两次,即使设备处于联机状态,也可以先响应缓存的响应,然后再使用网络响应(如果可用)。
拦截器是否可能?