Retrofit2简明讲解

什么是Retrofit

retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。

avatar

本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数,即Header、Url等信息,之后由okhttp来完成后续的请求工作。在服务端返回数据后,okhttp将原始数据交给Retrofit,Retrofit根据用户需求解析。

avatar

使用介绍

使用 Retrofit 的步骤共有7个:

步骤1:添加Retrofit库的依赖
步骤2:创建 接收服务器返回数据 的类
步骤3:创建 用于描述网络请求 的接口
步骤4:创建Retrofit实例 并 创建网络请求接口实例
步骤5:发送网络请求(异步 / 同步)

步骤1:添加Retrofit库的依赖

如图所示:

avatar

步骤2:创建 接收服务器返回数据 的类

在正式的请求网络数据中,返回的数据的外嵌套部分都是一样的,携带状态码、状态信息、实体数据一起返回,我们可以将它封装一个统一的数据回调类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Data
public class ChatCompletionResponse implements Serializable {

/** ID */
private String id;
/** 对象 */
private String object;
/** 模型 */
private String model;
/** 对话 */
private List<ChatChoice> choices;
/** 创建 */
private long created;
/** 耗材 */
private Usage usage;

}
步骤3:创建 用于描述网络请求 的接口

这个类就是Retrofit将okhttp请求抽象成java的接口类,用注解描述和配置网络请求参数,封装Url地址和网络数据请求

1
2
3
4
5
6
7
8
9
10
11
12
public interface IOpenAiApi {

/**
* 默认 GPT-3.5 问答模型
* @param chatCompletionRequest 请求信息
* @return 返回结果
*/
@POST("v1/chat/completions")
Single<ChatCompletionResponse> completions(@Body ChatCompletionRequest chatCompletionRequest);


}

在方法头部添加@POST注解,表示采用post方法访问网络请求,括号内的是请求的地址(Url的一部分) ,其中返回类型是Single<>,表示接收数据的类,ChatCompletionResponse是上面封装的一个接收数据的统一公共类

步骤4:创建Retrofit实例 并 创建网络请求接口实例
1
2
3
4
5
6
7
8
9
10
 IOpenAiApi openAiApi = new Retrofit.Builder()
.baseUrl(configuration.getApiHost())//得到url
.client(okHttpClient)//设置客户端
// RxJava2CallAdapterFactory的主要作用是:
// 1.将Android的Call对象转换为RxJava的Observable类型。
// 2.处理Call的错误和结果,并将其转换为RxJava的onError和onNext事件。
// 3.添加适当的错误处理逻辑,例如重试、网络错误等。
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(JacksonConverterFactory.create())//在请求和响应中使用jackson库进行json转换
.build().create(IOpenAiApi.class);
步骤5:发送网络请求(异步 / 同步)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class DefaultOpenAiSession implements OpenAiSession {

private IOpenAiApi openAiApi;

public DefaultOpenAiSession(IOpenAiApi openAiApi) {
this.openAiApi = openAiApi;
}

@Override
public ChatCompletionResponse completions(ChatCompletionRequest chatCompletionRequest) {
return this.openAiApi.completions(chatCompletionRequest).blockingGet();
}

}

References

  1. Carson带你学Android:网络请求库Retrofit使用教程(含实例讲解)

  2. Retrofit2 实战(一、使用详解篇)