Retorfit 基本用法
2020-04-26 本文已影响0人
anonymous_6bb6
介绍
Retorfit 是一个 RESTFul 的 HTTP 网络请求框架的封装,底层连接网络的工作是由 OkHttp 来完成的。Retrofit 提供的是将网络请求接口化
使用
- 添加 Retorfit 库的依赖 官网
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
- 创建描述网络请求的接口
public interface GetService {
@GET("users/{user}/repos")
Call<String> getRepos(@Path("user") String user);
}
- 创建Retrofit 实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("xxxx.xxxx")
.build();
- 创建网络接口实例
GetService getAnswer = retrofit.create(GetService.class); - 发送网络请求
Call call = getAnswer.getRepos("daniel");
同步
Call call = getAnswer.getRepos("daniel");
try {
call.execute();
} catch (IOException e) {
e.printStackTrace();
}
异步
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
API 讲解
接口注解
接口方法的注解和接口参数上的注解是用来指示如何来建立请求。Retrofit 库规定,每一个接口方法都要用注解来提供请求方式以及请求的相对路径。
1 网络请求方法
请求方法除了上述的@GET
之外,还有@HTTP @POST @PUT @PATCH @DELETE @OPTIONS @ HEAD
,而相对URL可以注解中指定出来@GET("users/list")
,还可以在URL中指定查询参数@GET("users/list?sort=desc")
请求URL也是可以通过参数动态更新的,被替换的字符串需要用{}
括起来,同时在参数中要用@Path(“”)
来标记需要进行替换的参数
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
对于较为复杂的query参数,可以使用@QueryMap
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
2 请求体类型
接口方法同样可以用注解的方式声明请求体类型,用到的注解有
@FormUrlEncoded
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
其中参数用@Field("表单Key")
, 后面的参数来表示Value
@Mutipart
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
参数需要用@Part
来标记
3 网络请求参数
@Headers @Header(用于参数中)
用来添加请求头
@Field @ FieldMap
用于添加表单数据到请求体中
@Part @PartMap
用于添加有文件上传的表单到请求体中
@Query @QueryMap
生成URL上的表单数据