Retrofit|青训营笔记

97 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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 数据或者上传文件