前言:
android网络请求,目前使用最多的应该就是Retrofit了,之前的volley,xUtils3,okHttp,很快将会变为过去时,(个人认为)但是之前的框架就不好了吗,只是因为技术在不断的更新,每位技术大牛都喜欢追求更好的技术,所以它们也将会注定成为过去时,今天我主要讲解的就是Retrofit的使用,以及源码的剖析为大家更深入的了解Retrofit。
1)Retrofit简介
app应用程序通过Retrofit请求网络, 实际上是使用Retrofit接口层封装请求参数,只有由OKHttp完成后续的请求操作,
在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。
Retrofit主要完成数据的转化和适配
@GET : 表示listRepos是一个get请求
{user} : 表示不是写死的数据,
@Path("user") : 表示请求时 设置的默认参数,如果传递过来的user为空的话。
2),Retrofit 网络请求过程
Retrofit如何请求:(官网的例子)
1.创建一个Retrofit对象,通过构建者模式。
2.填写传递的URL
3。调用addConverterFactory对象。
4.调用build方法完成创建。
5.调用githupService 方法
整个Retrofit请求:(自己编写的)
我们自己编写Retrofit请求, 分为六个步骤:
1.添加依赖以及网络权限:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
2.创建一个实体bean,用于接收服务器返回的类型:
3. 创建一个用于描述我们网络请求的接口:
4.创建一个Retrofit实例:
首先通过Builder模式创建一个Retrofit对象,设置一个URl,
1)addConverterFactory:他其实是我们的数据解析器,支持多种解析模式,
2)addCallAdapterFactory:表示网络请求的适配器,例如:RXjava
5.创建一个网络请求接口的实例:
MyInterface.class: 这是我们接口的字节码文件
调用接口提供的getCall方法,获取一个call的实例,
call:是http的实际请求
6. 成功和失败的回调:
在onResponse中处理请求成功的操作,在OnFailure处理请求失败的操作。
原理:
Retrofit是将我们每一个Http的请求抽象为java接口,然后用注解描述或者配置网络请求的参数。
内部实现原理就是用动态代理将接口的注解翻译成一个一个的http的请求,最后由线程池执行http请求。
二。动态代理
1.代理模式:为其他对象提供一种代理,用以控制对这个对象的访问
(你让你朋友在韩国给你买化妆品,你不需要你朋友怎么买的,你只需要关心你朋友给你买回来没,只需要关注结果,不需要关注过程)
1)静态代理
通过代码形式讲解:
创建一个抽象对象角色:
创建一个目标对象类,继承自抽象对象类
代理类
2)动态代理
动态代理:在程序运行时创建的代理方式。
相对于静态代理,优势:方便的对我们的代理函数进行统一的处理,不用频繁的修改每一个代理类的函数根据你相应的业务逻辑。
动态代理的写法:
1,jdk动态代理 通过java内部的反射机制实现的
2.CGLIB 直接修改字节码
如何实现jdk动态代理:
代理类和被代理类首要实现的方法
被代理类:实现Subject接口,
代理类:实现InvocationHandler接口,实现invoke方法
参数proxy : 真实对象的代理
参数 method: 调用真实对象的某个方法
参数args: 表示代理的某个方法的参数
每个代理类的对象都会关联一个表示内部处理逻辑的InvocationHanlder接口的实现
通过实现invoke方法的参数中可以获取参数,invoke方法的返回值被返回给使用者。
这个方法用来生成代理类用的,通过反射机制。