okHttp3的用法及介绍

1.okhttp官网地址:http://square.github.io/okhttp/
2. github中okhttp的链接路径[https://github.com/square/okhttp]

okhttp的特点: 

* 支持HTTP/2 和 SPDY
* 默认支持 GZIP 降低传输内容的大小
* 支持网络请求的缓存
* 当网络出现问题时,自动重试一个主机的多个 IP 地址

3.okHttp中Api的简单介绍:

  a.OkHttpClient:新建一个OkHttpClient实例,用于处理请求。

  b.Request:构建请求参数,如url,请求方式,请求参数,header等。

  c.Call:生成一个具体请求实例,相当于将请求封装成了任务;两种方式:

       ①、call.execute(),非异步方式,会阻塞线程,等待返回结果。
       ②、call.enqueue(Callback),异步方式。

get请求:

第一步:在app/build.gradle下的dependencies中添加依赖:
compile ‘com.squareup.okhttp3:okhttp:3.5.0’

第二步:创建okHttpClient对象

      OkHttpClient client = new OkHttpClient();//我们可以将这个对象看成是一个队列

  Request get_request = new Request.Builder()//创建request对象的get请求
                   .get()
                   .url(url)
                   .build();

第四步:将创建好的request添加到OkHttpClient中

  client.newCall(get_request).enqueue(new Callback() {
               @Override
               public void onFailure(Call call, final IOException e) {//失败返回的结果
                 //将错误的结果打印出来
                   Log.i(TAG, "onFailure() e=" + e);
                }

               @Override
               public void onResponse(Call call, Response response) throws IOException {//成功返回的结果
                   String result = response.body().string();
                   Log.i(TAG, " onResponse() reuslt=" +result);
               }
       });

post请求:

第一步:创建okHttpClient对象

      OkHttpClient client = new OkHttpClient();//我们可以将这个对象看成是一个队列

第二步:创建创建request对象的get请求

  Request post_request = new Request.Builder()//创建request对象的get请求
                    .post(requestBody)
                    .url(url)
                    .build();

第三步:将创建好的request添加到OkHttpClient中

  RequestBody requestBody = new FormBody.Builder()
                    .add("key", "value")
                    .build();
  client.newCall(get_request).enqueue(new Callback() {
               @Override
               public void onFailure(Call call, final IOException e) {//网络请求失败返回的结果
           //如果请求网络错误,将错误的结果打印出来
                   Log.i(TAG, "onFailure() e=" + e);
                }

               @Override
               public void onResponse(Call call, Response response) throws IOException {//成功返回的结果
                   String result = response.body().string();
                   Log.i(TAG, " onResponse() reuslt=" +result);
               }
       });

注意点:
1.okHttp在请求到网络数据后在call中的onFailure()及onResponse()都运行在非主线程,我们不能再这两个方法
里面直接更新UI

2.这里需要注意的一点:onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()

附加点:因为原生OkHttp的使用比较复杂,有一个包装过的工具项目okhttp-utils使用非常简单

* 添加依赖: compile 'com.zhy:okhttputils:2.3.8'
* 工具类简介:[https://github.com/hongyangAndroid/okhttp-utils](https://github.com/hongyangAndroid/okhttp-utils)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值