okHttp3的用法及介绍

来源:互联网 发布:gif动态制作软件 编辑:程序博客网 时间:2024/06/05 15:19

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)
0 0
原创粉丝点击