Retrofit使用基本步骤
1. 添加好依赖
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
1.2添加权限
<uses-permission android:name="android.permission.INTERNET"/>
2. 创建接口,设置请求类型与参数
- 新建
UserInfoModel
类(一个根据服务端数据的格式,如json数据的格式字段,而设计的一个Java类,类中的成员字段
对应着服务端数据
的字段
)
举个例子:
如服务器端数据格式如下:
则对应设计的UserInfoModel
类:
- 以及
UserMgrService
接口,
常用参数注解:**@GET、@POST
:确定请求方式;@Path
:请求URL的字符替代;@Query
:要传递的参数;@QueryMap
:包含多个@Query
注解参数;@Body
:添加实体类对象@FormUrlEncoded
:URL编码;
示例:
@GET("login")
public Call<UserInfoModel> login(@Query("username") String username,@Query("pwd") String pwd);
3. 创建Retrofit对象,设置数据解释器
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
4. 生成接口对象
UserMgrService service = retrofit.create(UserMgrService.class);
5. 调用(刚刚在接口中定义过的)接口方法,返回Call(数据类)对象
Call<UserInfoModel> call = service.login("zhangsan","123456");
6. 发送请求(同步、异步)
- **只有发送了请求,以上至第五步才能真正获得数据;
同步:调用Call对象的execute(),返回结果的响应体;
异步:调用Call对象的enqueue(),参数是一个回调;**
- **同步指程序调用请求方法后,
就一直等着返回数据,不干别的事情,
可能长时间阻塞线程;
异步指程序调用请求方法后,
直接干别的事情,不干等着数据返回了,
而是设置好回调,数据来时通过回调传讯,
不阻塞线程;**
- **同步调用需要手动做一个防阻塞处理(设置等待响应时间,超过则认定无响应,阻塞线程);
异步调用则不需要考虑这个问题;**