#.整体介绍
Retrofit也是一个网络请求库,它是对OkHttp的进一步封装。用OkHttp做请求时需要我们自己设置各种请求参数,并且对结果做解析。Retrofit的 网络请求工作实际上还是由OkHttp来完成, 而 Retrofit针对OkHttp的输入和输出过程做处理 ,简化了这两个过程的代码编写,提供了强大的功能支持。
1.Retrofit封装了上层的网络请求接口,帮助开发者简化OkHttp的Request封装。
可以使用Retrofit提供的一堆注解,来编写网络请求接口类,然后Retrofit会解析这个接口类,调用相关接口时, Retrofit内部会生成对应的Http请求数据体,并最终调用OkHttp来发起网络请求。
2.Retrofit提供了数据转换器和适配器功能,当从OkHttp获取到网络请求结果Response后会做进一步地各种处理
定义网络接口的返回类型时,需要与 数据转换器、适配器要相结合。
![](https://img-blog.csdnimg.cn/100fe51741ca4ea4b29c77661ddca30a.png)
#.使用过程简介
1.使用注解编写接口类,示例:
public interface TestHttpService2 {
@GET("weather/xxx/xxx")
Call<String> testGet1(@Query("params1") int arg1, @Query("params2") String arg2);
}
2.创建Retrofit实例,解析接口类获取接口对象。示例:
//创建OkHttpClient实例
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS);
mOkHttpClient = builder.build();
//创建Retrofit实例
Retrofit.Builder builder = new Retrofit.Builder();
//配置URL基地址,Retrofit2 的baseUrl必须以 /(斜线)结束,否则会抛出错误
//这里的baseUrl加上接口类中每个方法注解后面的路径,才是一个接口的完整url地址
builder.baseUrl(“Ten▪Api - Tenapi.cn”)
.client(mOkHttpClient)//配置OkHttp实例
//配置使用的适配器
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
//配置使用的数据转化器
.addConverterFactory(new HttpConverterFactory());
mRetrofit = builder.build();
//解析接口类,获取代理对象
mHttpService = mRetrofit.create(TestHttpService.class);
}
3.调用代理对象的接口,获取到Call对象(或者Call的封装对象,要看选用的是什么适配器);利用Call(或其它对象)触发网络请求,获取结果数据并做需要的处理。
//调用方法获取Call对象或者Call对象的封装对象
Call<String> call = mHttpService.testGet1(3, "xxx");
//触发Retrofit发起网络请求,并获取Retrofit处理后的请求结果
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
//....做相应处理....
}
@Override
public void onFailure(Call<String> call, Throwable t) {
//....做相应处理....
}
});
(整体流程示意图,图片来自网络)
![](https://img-blog.csdnimg.cn/b44fedc4788345f6a902853c1d66fdf6.png)
#.一、使用注解编写接口类
使用Retrofit提供的注解来编写接口类,Retrofit能够解析使用注解编写的接口类,从而大大简化了相关功能开发。
##.各种注解
主要分为4类,分别用于标注请求方式、标记请求头、标记请求参数、标记请求和响应格式。
1. 请求方法注解
注解类型
|
说明
|
@GET
|
get请求
|
@POST
|
post请求
|
@PUT
|
put请求
|
@DELETE
|
delete请求
|
@PATCH
|
用于更新局部资源,是PUT请求的补充
|
@HEAD
|
head请求
|
@OPTIONS
|
options请求
|
@HTTP
|
该注解可以替换以上所有的注解,它拥有三个属性:method、path、hasBody
|
2. 请求头注解
请求头注解
|
说明
|
@Headers
|