zoukankan      html  css  js  c++  java
  • retrofit2.0缓存设置

    如果你设置retrofit缓存出现了

    okhttp或者retrofit实现网络缓存504错误原因错误请使用以下方法设置缓存

     class Factory {
            private static String TAG = "factory";
            public static MovieApiService createService(final Context context) {
                //日志拦截器
                HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
                logging.setLevel(HttpLoggingInterceptor.Level.BODY);
                /**
                 * 获取缓存
                 */
                Interceptor baseInterceptor = new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request request = chain.request();
                        if (!AppUtil.isNetWorkAvailable(context)) {
                            /**
                             * 离线缓存控制  总的缓存时间=在线缓存时间+设置离线缓存时间
                             */
                            int maxStale = 60 * 60 * 24 * 28; // 离线时缓存保存4周,单位:秒
                            CacheControl tempCacheControl = new CacheControl.Builder()
                                    .onlyIfCached()
                                    .maxStale(maxStale, TimeUnit.SECONDS)
                                    .build();
                            request = request.newBuilder()
                                    .cacheControl(tempCacheControl)
                                    .build();
                            Log.i(TAG, "intercept:no network ");
                        }
                        return chain.proceed(request);
                    }
                };
                //只有 网络拦截器环节 才会写入缓存写入缓存,在有网络的时候 设置缓存时间
                Interceptor rewriteCacheControlInterceptor = new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request request = chain.request();
                        Response originalResponse = chain.proceed(request);
                        int maxAge = 1 * 60; // 在线缓存在1分钟内可读取 单位:秒
                        return originalResponse.newBuilder()
                                .removeHeader("Pragma")// 清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
                                .removeHeader("Cache-Control")
                                .header("Cache-Control", "public, max-age=" + maxAge)
                                .build();
                    }
                };
                //设置缓存路径 内置存储
                //File httpCacheDirectory = new File(context.getCacheDir(), "responses");
                //外部存储
                File httpCacheDirectory = new File(context.getExternalCacheDir(), "responses");
                //设置缓存 10M
                int cacheSize = 10 * 1024 * 1024;
                Cache cache = new Cache(httpCacheDirectory, cacheSize);
     
                OkHttpClient client = new OkHttpClient.Builder()
                        .cache(cache)
                        .addInterceptor(logging)
                        .addInterceptor(baseInterceptor)
                        .addNetworkInterceptor(rewriteCacheControlInterceptor)
                        .connectTimeout(15, TimeUnit.SECONDS)
                        .build();
     
                return new Retrofit.Builder()              
          .addConverterFactory(GsonConverterFactory.create())
          .addCallAdapterFactory(RxJavaCallAdapterFactory.create() .baseUrl(BASEURL) .client(client) .build() .create(MovieApiService.class); } }

      需要借助CacheControl 类才可以正常使用

  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/lvlv/p/14182736.html
Copyright © 2011-2022 走看看