这是我参与「第四届青训营 」笔记创作活动的第4天。
背景
本次项目中使用Retrofit作为网络请求工具。因为是第一次使用就在此记录Retrofit的使用。
Retrofit
Retrofit 是一个 RESTful api 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装。
应用程序通过Retrofit请求网络,使用Retrofit接口层封装请求方法、请求注解、Url等信息,之后由OkHttp来完成后续的请求工作。服务端返回数据后,OkHttp将原始数据交给Retrofit,Retrofit再根据用户需求解析。
尽管Retrofit相对于OkHttp有更大包体积及更高的使用成本,但是它也有以下四个优点
- 具有OkHttp的所有优点
- RESTful api设计风格
- 具有支持注解配备请求,包括请求方法、请求参数、请求头、返回值等
- 可以搭配多种Converter的数据解析,支持Gson、Jackson、Protobur。
使用步骤
添加Retrofit库的依赖
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
//自定义的GsonConverterFactory
.addConverterFactory(GsonConverterFactory.create())
//Url
.baseUrl("")
.build();
发起网络请求
mApi = retrofit.create(APi.class);
Call<News> news = mApi.getNews("1", "10");
news.enqueue(new Callback<News>() {
@Override
public void onResponse(Call<News> call, Response<News> response) {
}
@Override
public void onFailure(Call<News> call, Throwable t) {
}
public interface APi {
//添加请求头
@Headers("")
//GET请求方法
@GET("")
Call<News> getNews(@Query("num") String num,@Query("page")String page);
}
});
常见请求方法
| 格式 | 含义 |
|---|---|
| @GET | 表示这是一个GET请求 |
| @POST | 表示这个一个POST请求 |
| @PUT | 表示这是一个PUT请求 |
| @DELETE | 表示这是一个DELETE请求 |
| @HEAD | 表示这是一个HEAD请求 |
| @OPTIONS | 表示这是一个OPTION请求 |
| @PATCH | 表示这是一个PAT请求 |
常见请求注解
| 格式 | 含义 |
|---|---|
| @Headers | 添加请求头 |
| @Path | 替换路径 |
| @Query | 替代参数值,通常是结合get请求的 |
| @FormUrlEncoded | 用表单数据提交 |
| @Field | 替换参数值,是结合post请求的 |
| @Body | 可以用来提交 Json 数据或者上传文件 |