5.1 网络封装

1.使用单例模式封装网络请求对象
2.使用Retrofit请求网络
3.配置Retrofit缓存模块 .client(okHttpClient()) 使用的是网络拦截器( .addNetworkInterceptor(new NetWorkInterceptor()))
4.配置日志拦截器LoggingInterceptor


public class HttpManager {
    private static HttpManager httpManager;

    private HttpManager() {
    }

 	// 双重检查锁模式 (DCL)double check locked
    public static HttpManager getInstance() {

        if (httpManager == null) {

            synchronized (HttpManager.class) {

                if (httpManager == null) {
                    httpManager = new HttpManager();
                }
            }
        }

        return httpManager;
    }

    public Retrofit getRetrofit(String url) {

        return new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create()  )
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient())
                .build();

    }

    public OkHttpClient okHttpClient() {

//配置缓存的目录及大小   日志拦截器   缓存拦截器
        final OkHttpClient build = new OkHttpClient.Builder()
                .cache(new Cache(MyApp.myApp.getCacheDir(), 10 * 1024 * 1024))
                .addInterceptor(new LoggingInterceptor())
   
                .addNetworkInterceptor(new NetWorkInterceptor())
                .build();

        return build;
    }

     

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

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

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

            Response response = chain.proceed(request);
            if (!SystemUtils.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();

            }


        }
    }

    /**
     * 日志拦截器
     */
    class LoggingInterceptor implements Interceptor{


        @Override
        public Response intercept(Chain chain) throws IOException {

            long start = System.nanoTime();
            Request request = chain.request();
            Response proceed = chain.proceed(request);
            long end = System.nanoTime();


            Log.i("Request:",String.format("Sending request %s on %s%n%s",request.url(),chain.connection(),request.headers()));

            Log.i("interceptor","time="+(end-start)+"ms");
            return proceed;
        }
    }
}

发布了138 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/105654328
5.1