介绍
- Retrofit是Square公司基于RESTful风格推出的网络框架封装。Retrofit是基于OKHttp的网络请求框架的二次封装,其本质仍是OKHttp。
对比
- AndroidAsnyHttp
- 基于HTTPClient,作者已经停止维护,Android5.0不再使用HTTPClient,因此不推荐使用。
- Volley
- 基于HttpUrlConnection,Google官方推出,只适合轻量级网络交互如数据传输小,不适合大文件上传下载场景。
优点
- API设计简洁易用
- 注解化配置高度解耦
- 支持多种解析器、支持Rxjava
使用
- Retrofit开源库、数据解析器集成,注册网络权限。
//依赖包导入
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
//网络权限
<uses-permission android:name="android.permission.INTERNET"/>
- 创建接口设置请求类型与参数
- 常用参数注解
@GET、@POST:确定请求方式
@Path:请求URL的字符替代
@Query:要传递的参数
@QueryMap:包含多个@Query注解参数
@Body:添加实体类对象
@FormUrlEncoded:URL编码
//新建UserInfoModel类和UserMgrService接口
@GET("login")
Call<UserInfoModel> login(@Query("username")String username, @Query("password")String password);
@POST("login")
@FormUrlEncoded
Call<UserInfoModel> login(@Field("username") String username, @Field("password") String password);
- 创建Retrofit对象,设置数据解析器
- 常见数据解析器
Gson com.squareup.retrafit2:converter-gson:2.0.2
Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML com.squareup.retrofit2:converter-simplexml:2.0.
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对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())//数据解析器
.build();
- 生成接口对象
//生成接口对象
UserMgrService userMgrService = retrofit.create(UserMgrService.class);
- 调用接口方法返回Call对象
调用接口方法
Call zhangsan = userMgrService.login("张三", "123456");
- 发送请求(同步、异步)
- 同步:调用Call对象的execute(),返回结果的响应体
- 异步:调用Call对象的enqueue(),参数是一个回调
zhangsan.enqueue(new Callback<UserInfoModel>() {
@Override
public void onResponse(Call<UserInfoModel> call, Response<UserInfoModel> response) {
int code = response.code();
int code1 = response.body().code;
}
@Override
public void onFailure(Call<UserInfoModel> call, Throwable t) {
}
});
- 处理返回数据
总结
- Retrofit是基于OKHttp网络库的高级封装,采用注解、网络请求参数配置更灵活,扩展性更好,RESTful风格的API优先选用Retrofit。
破解Retrofit
-
Retrofit源码:http://github.com/square/retrofit
-
java内置的动态代理只支持接口
-
代理的其它方案cglib