Dim*_*ian 5 java networking android caching retrofit
我不知道如果不围绕Retrofit构建包装器,是否完全有可能。我希望我的请求通过回调两次,一次通过缓存/磁盘响应,一次通过网络(如果有)。
目前,我使用带有自定义拦截器的自定义okHttpClient,如下所示:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(new Cache()).build();
Run Code Online (Sandbox Code Playgroud)
这是缓存拦截器
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);
}
Run Code Online (Sandbox Code Playgroud)
}
它可以工作,但是仅当设备处于脱机状态时(此代码除外),才会触发我的缓存响应。现在,即使设备处于在线状态,我也想有两次响应的机会,首先使用缓存的响应进行响应,然后使用联网的响应(如果可用)进行响应。
拦截器有可能吗?
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |