Android Retrofit 2,今天带你详细了解各组件原理
而在 Android 所有网络请求库中,
Retrofit
是最受开发者欢迎的一个网络请求库
[retrofit:2.5.0 官方文档](
)
[retrofit:2.5.0 - github](
)
简介
Retrofit
是 Square 公司开发的一款针对 Android 网络请求的框架,遵循 Restful 设计风格,底层基于 OkHttp.
功能
支持同步/异步网络请求
支持多种数据的解析 &序列化格式(Gson、json、XML 等等)
通过注解配置网络请求参数
提供对 Rxjava 的支持
高度解耦,使用方便
对比其他网络请求框架
性能最好,速度最快
高度封装导致扩展性差
简洁易用,代码简化
解耦彻底,职责细分
易与其他框架联用(Rxjava)
使用场景
任何场景下建议优先使用
网络请求流程
App 应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作
在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit 根据用户的需求对结果进行解析
具体使用
1.添加 Retrofit 库的依赖
dependencies {implementation 'com.squareup.retrofit2:retrofit:2.5.0'api 'com.squareup.retrofit2:converter-gson:2.0.2'}
2. 添加 网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3. 创建 装载服务器返回数据 的类
public class ResultData{...// 根据返回数据的格式和数据解析方式(Json、XML 等)定义
}
4. 创建 用于配置网络请求 的接口
Retrofit 将 Http 请求 抽象成 Java 接口:采用 注解 描述网络请求参数 和配置网络请求参数
public interface GetRequestInterface {
@GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")Call<ResultData> getCall();// @GET 注解的作用:采用 Get 方法发送网络请求
// getCall() = 接收网络请求数据的方法// 其中返回类型为 Call<*>,*是接收数据的类(即上面定义的 Translation 类)// 如果想直接获得 Responsebody 中的内容,可以定义网络请求返回值为 Call<ResponseBody>}
注解说明
网络请求方法:@GET、@POST
、@PUT、@DELETE、@HEAD(常用)
网络请求标记: @FormUrlEncoded、@Multipart、@Streaming
网络请求参数: @Header &、@Headers、 @Body、@Field 、 @FieldMap、@Part 、 @PartMap、@Query、@QueryMap、@Path、@Url
具体作用以及解释请自行前往官方文档查看,这里就不一一解释了
5. 创建 Retrofit 实例
Retrofit retrofit = new Retrofit.Builder().baseUrl("http://fanyi.youdao.com/") // 设置网络请求的公共 Url 地址.addConverterFactory(GsonConverterFactory.create()) // 设置数据解析器.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 支持 RxJava 平台.build();
数据解析器说明 Retrofit 支持多种数据解析方式,使用时需要在 Gradle 添加依赖
数据解析器 Gradle 依赖
Gson com.squareup.retrofit2:converter-gson:2.0.2
Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML com.squareup.retrofit2:converter-simplexml:2.0.2
Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2
Moshi com.squareup.retrofit2:converter-moshi:2.0.2
Wire com.squareup.retrofit2:converter-wire:2.0.2
Scalars com.squareup.retrofit2:converter-scalars:2.0.2
网络适配器说明 Retrofit 支持多种网络请求适配器方式:guava、Java8 和 rxjava Android 提供默认的 CallAdapter,不需要添加网络请求适配器的依赖,若要使用其他网络适配器,则需要按照需求在 Gradle 添加依赖
网络请求适配器 Gradle 依赖
guava com.squareup.retrofit2:adapter-guava:2.0.2
Java8 com.squareup.retrofit2:adapter-java8:2.0.2
评论