一、什么是Retrofit
Retrofit主要是对Android网络请求的框架的封装,它遵循Restful设计风格,底层基于OkHttp。
换句说,网络请求的工作本质上是OkHttp完成,而Retrofit仅负责网络请求接口的封装。
Retrofit的使用步骤
1、创建描述网络请求的接口
public interface ServiceApi {
// 接口涉及到解耦,userLogin 方法是没有任何实现代码的
@GET("LoginServlet")
CalluserLogin(@Query("userName") String userName, @Query("password") String userPwd);
}
2、创建Retrofit实例,此处使用了Builder设计模式,创建了Retrofit实例
Retrofit retrofit =new Retrofit.Builder().
baseUrl("http://192.168.29.95:8080/OkHttpServer/").
client(okHttpClient).build();
3、创建网络请求接口实例 并 配置网络请求参数
mServiceApi = retrofit.create(ServiceApi.class);//创建网络请求接口实例
此处用了动态代理的模式创建接口实例 源码如下:

Call<UserLoginResult> login = RetrofitClient.getServiceApi().userLogin("Darren", "988514");//配置网络请求参数
//网络请求参数的封装将会在封装OkHttpCall时进行
4、发送网络请求

最终会执行到封装的okHttpCall中,代码如下:

5、处理服务器返回的数据
在parseBody()中进行解析;
// 获取解析类型 T 获取方法返回值的类型
Type returnType = method.getGenericReturnType();
// 返回值对象
Class <T> dataClass = (Class <T>) ((ParameterizedType) returnType).getActualTypeArguments()[0];
// 最后在用解析工厂去转换
//解析完后 进行回调就完成了一次网络请求了
三、注解详解
1、方法注解:@GET @POST、@PUT、@DELETE、@PATCH、@OPTIONS、@HTTP
2、标记注解:@FormUrlEncoded、@Multipart、@Streaming
@FormUrlEncoded -- 用于修饰Fiedl注解 和FileldMap注解,表示请求正文将使用表单网址编码
@Multipart -- 作用于方法,表示请求体是多部分的,每个部分作为一个参数,且用Part注解声明
@Streaming -- 作用于方法未使用@Straming 注解,默认会把数据全部载入内存,返回数据较大时需要使用该注解。
3、参数注解:@Query 、@QueryMap、@Body、@Field、@FieldMap、@Part、@PartMap
@Query:作用于方法参数,用于添加查询参数,即请求参数,(参数值可以为空,为空时,忽略该值)例如:

@QueryMap:作用于方法的参数,以map的形式添加查询参数,即请求参数(map中的每一项发键和值都不能为空)
4、其他注解:@Path、@Header、@Headers、@Url
网友评论