Retrofit入门学习

一、什么是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、发送网络请求

发送网络请求.png

最终会执行到封装的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:作用于方法参数,用于添加查询参数,即请求参数,(参数值可以为空,为空时,忽略该值)例如:


@Query用于方法参数

@QueryMap:作用于方法的参数,以map的形式添加查询参数,即请求参数(map中的每一项发键和值都不能为空)


4、其他注解:@Path、@Header、@Headers、@Url

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容