Retrofit 添加网络缓存

在正常的使用Retorfit流程添加 .client(okHttpClient)
然后创建okhttpclient对象。

 public static void  getNetData( String name, final CallBack callBack){

        final OkHttpClient okHttpClient = new OkHttpClient.Builder()
        		//添加网络过滤器
                .addNetworkInterceptor(new NetWorkInterceptor())
                //添加缓存地址和大小
                .cache(new Cache(MyApp.context.getCacheDir(),1024*1024*10))
                .build();

        Log.d(TAG, "getNetData: "+name);
        final Retrofit retrofit = new Retrofit.Builder()
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(ApiService.baseUrl).build();
        final ApiService apiService = retrofit.create(ApiService.class);
        apiService.getZhBean(name).enqueue(new Callback<TranslationBean>() {
            @Override
            public void onResponse(Call<TranslationBean> call, Response<TranslationBean> response) {
                final TranslationBean.ContentBean content = response.body().getContent();
                 
            }

            @Override
            public void onFailure(Call<TranslationBean> call, Throwable t) {

                Log.d(TAG, "onFailure: "+t.getMessage());
                callBack.updateFailed(t.getMessage());
            }
        });

    }
    static class NetWorkInterceptor implements Interceptor {
        Request request;
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {

            request = chain.request();
            if (! checkNetWork()){

                request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();
            }

            okhttp3.Response response = chain.proceed(request);
            if (! checkNetWork()){

                int maxAge=0;
                return  response.newBuilder().removeHeader("Pragma").header("Cache-Control","public ,max-age="+maxAge).build();

            }else{

                int maxTime = 60*60 *24;

                return  response.newBuilder().removeHeader("Pragma").header("Cache-Control","public ,max-age="+maxTime).build();

            }


        }
    }

    /**
     * 检查是否有网络
     * @return
     */
    public static boolean checkNetWork(){
        ConnectivityManager manager = (ConnectivityManager) MyApp.context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return manager.getActiveNetworkInfo() != null;
    }
发布了138 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/105390555