改进2:先使用缓存的响应,再使用网络响应

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)

}

它可以工作,但是仅当设备处于脱机状态时(此代码除外),才会触发我的缓存响应。现在,即使设备处于在线状态,我也想有两次响应的机会,首先使用缓存的响应进行响应,然后使用联网的响应(如果可用)进行响应。

拦截器有可能吗?