OkHttp2.x简单使用说明

转载请标明出处:
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值