OkHttp源码分析(一)之基础使用

一、简介

OKHttp是一个处理网络请求的开源项目,是Android 当前最火热网络框架,由 Square 公司负责开发和维护,我们经常使用的另外一个开源网络请求库Retrofit,它其实就是基于OKHttp来实现,对OKHttp进行再次封装。

git源码地址:

https://github.com/square/okhttp

二、简单使用

OKHttp发起网络请求,具有同步和异步两种请求方式,下面来看看具体的代码。

private OkHttpClient mClient;
private Request mRequest;

private void initData(){
    mClient = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
    mRequest = new Request.Builder().url("http://www.baidu.com").get().build();
}

1)同步方式

private void synOkHttpTest(){

    Call call = mClient.newCall(mRequest);
    Response response = null;
    try {
        response = call.execute();
        System.out.println(response.body().string());
    } catch (IOException e) {
        e.printStackTrace();
    }

}

2)异步方式

private void asynOkHttpTest(){
    System.out.println(Thread.currentThread().getName());
    Call call = mClient.newCall(mRequest);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            System.out.println(e.toString());
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            // 在子线程中执行
            System.out.println(Thread.currentThread().getName());
            System.out.println(response.body().string());
        }
    });

}

通过代码可以发现,无论是同步请求或是异步请求,在创建Client和Request对象都是相同的,甚至在创建Call对象都是相同的,通过Call对象调用execute方法即发起同步请求,调用enqueue方法发起异步请求。同时需要注意的是Call对象调用对应的方法都只能调用一次,当同一个Call对象调用方法两次时,就抛出异常,这个通过阅读对应的源码也能发现。

以上,便是对OkHttp最简单的使用,下面会不定期更新其他一些方法的使用。

猜你喜欢

转载自blog.csdn.net/u010349644/article/details/83345604