OkHttp2.x简单使用说明

来源:互联网 发布:软件配置管理报告 编辑:程序博客网 时间:2024/06/16 10:34

转载请标明出处:
http://blog.csdn.net/mr_lawen/article/details/53334006

简介

OkHttp是一款高效的HTTP请求框架,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还具有有透明的GZIP压缩,请求缓存等优势。

配置依赖

compile 'com.squareup.okhttp:okhttp:2.4.0'

OkHttp内部依赖okio,需要同时导入okio:

compile 'com.squareup.okio:okio:1.5.0'

添加权限

<uses-permission android:name="android.permission.INTERNET"/>

使用方式

Http Get

创建出OkHttpClient对象

OkHttpClient mOkHttpClient = new OkHttpClient();

创建一个http请求,这里为get请求方式

Request request = new Request.Builder()          .url("http://www.baidu.com")          .build();

通过OkHttpClient将request请求封装为一个任务call

Call call = mOkHttpClient.newCall(request);

将call加入任务队列,并添加回调

call.enqueue(new Callback() {    @Override    public void onFailure(Request request, IOException e) {    }    @Override    public void onResponse(Response response) throws IOException {        //请求成功,获得返回数据        Logger.d(response.body().string());    } });

以上就是发送一个get请求的步骤:

首先构造一个Request请求对象,请求的参数至少有url,可以通过Request.Builder设置更多的参数(header、method等)。
然后将request封装为一个任务call。
最后异步执行请求,将call加入调度队列,等待任务执行完成,就可以在Callback中得到返回结果。通过response.body().string()可以获取返回的字符串;通过response.body().bytes()可以获取返回的二进制字节数组;通过response.body().byteStream()可以获取返回的InputStream,支持大文件下载。OnResponse()执行的线程不是UI线程,如果想要更新UI还需要通过handler等方式。

Http Post

首先同样是创建OkHttpClient对象

OkHttpClient mOkHttpClient = new OkHttpClient();

然后构建键值对请求体,使用FormEncodingBuilder

RequestBody requestBody = new FormEncodingBuilder()                .add("phoneNumber", "15545104510")                .add("action", "17").build();

但是FormEncodingBuilder不可以更改编码方式,当我们不需要OkHttp默认的utf-8编码时,这种键值对请求方式就不适用了,你可以下载源码进行修改,但这样代价有点大,没必要,有另一种实现方式:

String params = "phoneNumber=15545104510&action=17";RequestBody requestBody = RequestBody                .create(MediaType.parse("application/x-www-form-urlencoded;charset=gbk"),params);

通过RequestBody.create()方式,修改编码方式,将请求键值对参数以字符串的形式加入。注意这样只是修改了请求时的编码,onResponse()中获取数据时也要进行转码:

Logger.d(new String(response.body().bytes(),"gbk"));

这种方式也同样适合post Json串。
接下来创建一个Request对象

Request request = new Request.Builder()                .url(url)                .post(requestBody)   //加入请求体                .build();

通过OkHttpClient将request请求封装为一个任务call

Call call = mOkHttpClient.newCall(request);

将call加入任务队列,并添加回调

call.enqueue(new Callback() {    @Override    public void onFailure(Request request, IOException e) {    }    @Override    public void onResponse(Response response) throws IOException      {        //请求成功,获得返回数据        Logger.d(new String(response.body().bytes(),"gbk"));    }});
1 0
原创粉丝点击