美文网首页
retrofit 缓存设置

retrofit 缓存设置

作者: sunny_ke_ke | 来源:发表于2016-10-25 06:23 被阅读338次

retrofit 缓存设置

CacheInterceport

public class CacheInterceport implements Interceptor {
Context context;
final static int maxStale = 7 * 24 * 60;//分钟
int maxAge = 6;//分钟

public CacheInterceport(Context context) {
    this.context = context;
}

public CacheInterceport(Context context, int maxAgeOnline, int maxScaleOffline) {
    this.context = context;
}

@Override
public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    if (checkNet(context)) {
        Response response = chain.proceed(request);
        int maxAge = 6;
        return response.newBuilder()
                .removeHeader("Pragma")
                .removeHeader("Cache-Control")
                .header("Cache-Control", "public, max-age=" + maxAge)
                .build();
    } else {
        Log.e("yjbo-cache", "离线时缓存时间设置");
        request = request.newBuilder()
                .cacheControl(FORCE_CACHE1)
                .build();
        Response response = chain.proceed(request);
        //下面注释的部分设置也没有效果,因为在上面已经设置了
        return response.newBuilder()
                .build();
    }
}

//这是设置在多长时间范围内获取缓存里面,缓存一周
public static final CacheControl FORCE_CACHE1 = new CacheControl.Builder()
        .onlyIfCached()
        .maxStale(maxStale, TimeUnit.MINUTES)
        .build();
        }

配置okhttp及retrofit

/***
 * 获取服务器数据
 */
private void initGet() {
    //设置缓存
    File httpCacheDirectory = new File(Environment.getExternalStorageDirectory(), "cache_responses_yjbo");
    Cache cache = null;
    try {
        cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
    } catch (Exception e) {
        Log.e("OKHttp", "Could not create http cache", e);
    }
    HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
    httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

    Interceptor cacheInterceptor = new CacheInterceport(this);

    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .cache(cache)
            .addInterceptor(cacheInterceptor)
            .build();


    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(HttpService.baseHttp)
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .client(okHttpClient)
            .build();

    final HttpService service = retrofit.create(HttpService.class);

    service.getRxUrl("http://lbs.sougu.net.cn/app.php?m=souguapp&c=appusers&a=network").subscribeOn(Schedulers.io())
            .compose(new ErrorTransform<ResponseBody>())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<ResponseBody>() {
                @Override
                public void onCompleted() {
                    Log.e("XXX", "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.e("XXX", "onError");
                    showResult.setText("onError");
                }

                @Override
                public void onNext(ResponseBody responseBody) {
                    Log.e("XXX", "onResponse" + "-");
                    try {
                        String result = responseBody.string();
                        showResult.setText(result);
                        Log.e("XXX", "onResponse" + "-" + result);
                    } catch (Exception e) {
                        Log.e("XXX", "error");
                    }
                }
            });
}

相关文章

网友评论

      本文标题:retrofit 缓存设置

      本文链接:https://www.haomeiwen.com/subject/othruttx.html