android 4.4 okhttp,Android开发之OkHttp3.4.x

HTTP是现代应用程序访问网络的一种方式。网络中很多请求就是使用的http方式,来访问网络的。

Android从4.4开始,HttpUrlConnection开始使用okhttp作为底层实现。实现原理如下图:

842dc3f3dc2cbd70822fea95f5117c2f.png

这篇博客简单说一下okhttp的使用。文字部分没有讲清楚的,可以查看代码里面的注释。首先看一下okHttp怎么工作的。

首先我们看看一个okhttp完整的网络访问,都涉及到了那几个类(这里先说核心类)。

1.OkHttpClient: Call类的工厂,Call是用来发送网络请求和接收服务器响应的类。这个类实例可以设置拦截器,缓存大小,缓存目录,连接池等信息。

2.Request:是用来创建http请求,这个请求里面可以设置请求头信息,网络访问地址,请求方式(GET,POST,DELETE,PUT)等。

3.Call:一个接口,一个准备执行的请求。

具体代码:/**

* 首先构建OkHttpClient,

* 1. 方法:直接使用new 关键字创建

* 2. 方法:使用构造着模式,OkHttpClient.Builder.build方法构造。

* 这个类是用来配置和创建HTTP 连接。在大多数的程序中,这个类可以封装成一个单利模式

* 来进行程序网络访问的统一管理。

* 设置 共享的响应缓存、线程池、连接复用

* (要设置这些东西,请使用官方提供的方法,OkHttpClient.Builder来设置缓存目录、缓存大小,

* 配置连接池,

* 配置拦截器,

* )

*然后构建Request请求对象

* request对象只能使用Request.Builder.build来创建对象。

* 最后Call,使用httpClient.newCall(request)来生成一个执行对象。

* 用call对象,调用execute方法,执行网络请求

* */

File file = new File(Environment.getDataDirectory().getAbsolutePath()+File.pathSeparator+"http_cache");

final Cache cache = new Cache(file, 20000);

//最大的闲置连接数量,

ConnectionPool pool = new ConnectionPool(10, 5, TimeUnit.SECONDS);

//call的工厂类,Call是用来发送请求和接收响应的类

OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {

@Override

public Response intercept(Chain chain) throws IOException {

//请求时的参数

Response response = chain.proceed(chain.request());

okhttp3.MediaType mediaType = response.body().contentType();

//                响应体

String content = response.body().string();

return response.newBuilder()

.body(okhttp3.ResponseBody.create(mediaType, content))

.build();

}

//           这只连接池,缓存

}).connectionPool(pool).cache(cache).build();

//这里面来设置网络访问的头信息,以及访问的网络地址,这里默认使用get方式请求

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

Call call = httpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

Log.d("--MainActivity--", "onFailure: ---网络访问失败");

}

@Override

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

//                这个方法在网络访问成功之后回执行。response响应体,实例里封装了服务器返回的数据。

//                最常用的就是body(),服务器返回的数据(ResponseBody)。这个ResponseBody里面是服务器具体返回的数据

//                如果是返回的字符串则用string()方法。如果是流, 则byteStream(),字节数组bytes().

Log.d("--MainActivity--", "onResponse: "+response.body().string());

}

});

这样一个完整的网络访问就完成了。

使用到得权限:

注:okhttp源码:https://github.com/square/okhttp

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值