改造2:使用缓存响应然后网络响应

时间:2016-10-24 09:18:06

标签: java android caching networking retrofit

我不知道在没有围绕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);
}

}

它可以工作,但只有在设备离线时才会触发我的缓存响应(此代码除外)。现在我希望有机会响应两次,即使设备处于联机状态,也可以先响应缓存的响应,然后再使用网络响应(如果可用)。

拦截器是否可能?

0 个答案:

没有答案