【Android】Retrofit网络库的学习与总结


Retrofit介绍

Retrofit是Square公司基于RESTful风格推出的网络框架封装。既然它与OKHttp都是Square公司推出的,那么它与OKHttp有什么关系呢?

与OKHttp的关系

Retrofit是基于OKHttp框架的二次封装,其本质仍然是OKHttp。只是在OKHttp的基础上给我们提供了一套更灵性的API

Retrofit的优点

  • API设计简洁易用
  • 注解化的配置高度解耦
  • 支持多种解析器
  • 支持RxJava

Retrofit的使用

1. 导入依赖包及申请网络权限

2. 创建接口

我们需要创建一个接口并且将请求的参数及类型设置好。

如下面:

新建UserInfoModel类及UserMgrService接口

其中,UserInfoModel就是返回数据的实体类。

而UserMgrService中有一个接口方法login。其中还有一些注解。

常用注解的含义

  • @GET、@POST:确定请求方式
  • @Path:请求URL的字符替代
  • @Query:要传递的参数
  • @QueryMap:包含多个@Query注解参数
  • @Body:添加实体类对象
  • @FormUrlEncoded:URL编码

举个栗子

比如对于http://v3.wufazhuce.com:8000/api/music/detail/2360?version=3.5.0&platform=android这个地址

采用GET请求,则@GET()中应该填写2360,也就是问号前的东西

@GET(“2360”)

而@Query则是version和platform。

@Query("platform")

@Query("version")

而baseUrl则是:http://v3.wufazhuce.com:8000/api/music/detail/

3. 创建Retrofit对象、设置数据解析器

我们通过构建者设计基本URL、数据解析器后调用build方法返回Retrofit对象。这里我们传入的数据解析器是Gson的。

常用的数据解析器

  • Json
    • Gson
    • Jackson
  • XML
    • Simple XML
  • 其他
    • Protobuf
    • Moshi
    • Wire
    • Scalars

4. 生成接口对象

之前我们创建了UserMgrService,在此处调用retrofit的create方法即可获得对应实例。

至于为什么Retrofit可以通过一个我们没有实现的接口来创建这样一个类,则是由于它使用了动态代理这一设计模式。

5. 调用接口方法,返回Call对象

我们通过接口对象,调用对应方法,即可得到对应的Call对象

6. 发送请求(同步、异步)

之前我们创建了Call对象,但还没有真正的执行网络请求。

同步请求

我们可以调用Call对象的execute()方法,来发送同步请求。返回结果的响应体。

异步请求

我们可以调用Call对象的enqueue()方法,发送异步请求。参数是一个回调。

7. 处理返回数据

对得到的数据进行相应处理。


Android Developer in GDUT