深入剖析你不知道的Retrofit网络请求神器(一)

前言:

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方法的返回值被返回给使用者。

 

这个方法用来生成代理类用的,通过反射机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值