android http 改用了okhttp,Android OkHttp简易使用

Android 的网络请求框架,现在事层出不穷,比如之前介绍的《Android Volley框架源码解析》和《Android Retrofit的使用》,除此之外OkHttp也是Android网络请求非常优秀的框架,而且据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了,如此优秀的网络请求框架,需要我们去学习一下。

在网上有很多关于OkHttp的使用文章,那么我为什么还要写该片文章呢?一是为了普及那些还没有使用过OkHttp的开发者认识到OkHttp这一优秀框架,二是该文章收集了比较优秀的OkHttp文章,让读者可以在该文章中直接找到学习OkHttp的精华文章。

简介

我们直接看到OkHttp官网的介绍:OkHttp是默认有效的HTTP客户端,而且具有的优点:

1、连接池可减少请求延迟(如果HTTP / 2不可用);

2、透明的GZIP缩小下载大小;

3、响应缓存避免了完全重复请求的网络。

网络请求使用

1)配置环境

在app的build.gradle中添加OkHttp的依赖

compile 'com.squareup.okhttp3:okhttp:3.9.1'

复制代码

由于OkHttp内部依赖okio,需要同时添加okio依赖:

compile 'com.squareup.okio:okio:1.6.0'

配置好环境就可以使用的了。

2)get请求

OkHttpClient okHttpClient = new OkHttpClient();

Request request = new Request.Builder().url("https://interface.meiriyiwen.com/article/today?dev=1").build();

Call call = okHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

Log.i("test","text------>"+response.body().string());

}

});

复制代码

77ccf6586e32f7891a63e4f8e9144c73.png

注意:需要用到call.enqueue的方法进行异步请求,其回调的onResponse方法是运行在线程里的。

3)POST请求提交Json数据

try {

JSONObject jsonObject = new JSONObject();

jsonObject.put("version","3.5");

jsonObject.put("platform","android");

MediaType JSON = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(JSON,jsonObject.toString());

OkHttpClient okHttpClient = new OkHttpClient();

Request request = new Request

.Builder()

.url("http://v3.wufazhuce.com:8000/api/hp/detail/1557")

.post(body)

.build();

Call call = okHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

Log.i("test","text------>"+response.body());

}

});

} catch (JSONException e) {

e.printStackTrace();

}

复制代码

需要在创建一个MediaType,并且调用MediaType.parse("application/json; charset=utf-8")指定JSON类型。创建一个RequestBody对象,在Builder的post方法传入即可。

4)POST提交表单

OkHttpClient okHttpClient = new OkHttpClient();

FormBody body = new FormBody

.Builder()

.add("version","3.5")

.add("platform","android")

.build();

Request request = new Request

.Builder()

.url("http://v3.wufazhuce.com:8000/api/hp/detail/1557")

.post(body)

.build();

Call call = okHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

Log.i("test","text------>"+response.body().string());

}

});

复制代码

注意:需要用到FormBody对象,传入表单的键对值,在OkHttp3.0之前使用的是FormEncodingBuilder对象,在3.0之后FormEncodingBuilder已被FormBody取代,同样在post方法传入该对象即可。

本文也参考了关于OkHttp比较优秀的文章,读者如果想深入学习,希望可以参考一下文章:

对OkHttp的封装,可以参考鸿洋大神的这篇文章:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值