美文网首页
OkHttp开发之旅2-手写OkHttp网络请求框架

OkHttp开发之旅2-手写OkHttp网络请求框架

作者: Laughing_G | 来源:发表于2019-10-04 15:27 被阅读0次

一、OkHttp请求基本三步:

        //第一步
        HttpClient client = new HttpClient.Builder().retry(2).build();
        //第二步
        Request request = new Request.Builder()
                .url("http://www.kuaidi100.com/query?type=yuantong&postid=222222222")
                .build();

        //第三步
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, Throwable throwable) {
                if (DEBUG) Log.d(TAG, "MainActivity onFailure: " + "" + throwable);
            }

            @Override
            public void onResponse(Call call, Response response) {
                if (DEBUG) Log.d(TAG, "MainActivity onResponse: " + "" + response.getBody());
            }
        });

二、OkHttp重要类分类:

1.HttpClient:一个重要成员变量:Dispatcher(调度器),和一个能返回Call的方法:newCall;
2.Dispathcer:内部定义了一个线程池,和两条队列(正在执行队列和等待执行队列);
3.Call:内部定义了真正执行网络清理的线程AsyncCall,它的enqueue方法是通过dispatcher的enqueue的方法,将Runnable传递给Dispatcher的线程池管理执行。
附加说明:
在Call类的getResponse方法中,先定义了四种拦截器:重试拦截器、请求头拦截器、连接拦截器、通信拦截器,通过责任链模式,执行网络请求:

    /**
     * 这里是重点!!!
     * @return
     */
    private Response getResponse() throws Exception{
        //创建拦截器责任链
        List<Interceptor> interceptors = new ArrayList();
        //重试拦截器
        interceptors.add(new RetryInterceptor());
        //请求头拦截器
        interceptors.add(new HeaderInterceptor());
        //连接拦截器
        interceptors.add(new ConnectionInterceptor());
        //通信拦截器
        interceptors.add(new CallServiceInterceptor());
        InterceptorChain chain = new InterceptorChain(interceptors, 0, this, null);
        return chain.process();
    }

三、责任链模式说明:

责任链模式说明

四、OkHttp内部是通过Socket进行网络请求:

socket示意图

Demo地址:
手写OkHttp网络请求

相关文章

网友评论

      本文标题:OkHttp开发之旅2-手写OkHttp网络请求框架

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