Android OkHttp源码解析入门教程(一)

概述

从OkHttp问世以来,度娘,google上关于OkHttp的讲解说明数不胜数,各种解读思想不尽相同,一千个读者就有一千个哈默雷特。本篇文章从源码出发向你介绍Okhttp的基本使用以及底层实现原理,让你从会写转向会用,学习Android顶尖源码的设计理念和开源扩展性,如果解读有误,还望提出探讨纠正。

文章链接:

Android OkHttp源码解析入门教程:同步和异步(一)

Android OkHttp源码解析入门教程:拦截器和责任链(二)

工欲善其事,必先利其器

Android API23(6.0)版本以后,谷歌正式移除Apache-HttpClient,OkHttp  作为一个现代,快速,高效的HttpClient,其功能之强大也是显而易见的的

1.支持SPDY  可以合并多个请求到同一个主机的请求,连接池,GZIP和HTTP缓存

2.支持HTTP / 2协议,通过HTTP / 2可以让客户端中到服务器的所有请求共用同一个Socket连接

3.非HTTP / 2请求时,  OkHttp内部会维护一个线程池,通过线程池可以对HTTP / 1.x的连接进行复用,减少延迟

4.支持后,得到请求,基于HTTP的文件上传和下载

5.默认情况下,OkHttp会自动处理常见的网络问题,像二次连接,SSL的握手问题

当然OkHttp的功能远不止这些,这里只是说明平时经常用到的。既然OkHttp已经作为官方库使用,相比我们在做项目的时候也会用,但对于其底层的实现原理还是一知半解,那我们就。从这篇文章开始解释其底层实现原理开车前先来一波介绍:

Ecplise引用:下载最新的瓶子

Android studio引用:

implementation 'com.squareup.okhttp3:okhttp:3.11.0' //最新版本号请关注okhttp官网

Maven引用:

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.11.0</version> //最新版本号请关注okhttp官网
</dependency>

各位老司机们,马上开车,嘀嘀嘀!

一,基本使用方法

流程如下

// 启动客户端类,主要有两种方法进行创建,new对象和Builder内部类实现实例化
OkHttpClient  client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();

// get请求
// 通过Builder模式创建一个Request对象(即请求报文)
// 这里可以设置请求基本参数:url地址,get请求,POST请求,请求头,cookie参数等
Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .header("User-Agent", "xxx.java")
                .addHeader("token", "xxx")
                .get()
                .build();

// POST请求
// 表单形式上传
RequestBody body = new FormBody.Builder().add("xxx","xxx").build();
// JSON参数形式,File对象上传
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); 
RequestBody body = RequestBody.create(MediaType.parse("File/*"), file);

Request request = new Request.Builder()
                .post(body)
                .url(url)
                .header("User-Agent", "xxx.java")
                .addHeader("token", "xxx")
                .build();


// 创建Call对象(Http请求) ,即连接Request和Response的桥梁
// newCall方法将request封装成Call对象
Call call = client.newCall(request);
try{
// Response即响应报文信息,包含返回状态码,响应头,响应体等
    Response response = call.execute();
// 这里深入一点,Call其实是一个接口,调用Call的execute()发送同步请求其实是调用了Realcall实现类的方法,这点会在下面源码进行详细分析
    System.out.println(response.body().string());
}catch(IOException e){
    e.printStackTrace();
}

看完代码你可能觉得OkHttp基本流程很繁琐,但是去掉一些扩展参数,你会发现OkHttp的使用其实很简单,无非就是
1.创建一个OkHttpClient并

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值