本文最后更新于 2025-04-01,文章超过7天没更新,应该是已完结了~

1. 什么是 Retrofit?

Retrofit 是一个 网络请求库,用来 简化 API 调用,让你像调用普通方法一样,轻松发起 HTTP 请求,并拿到服务器返回的数据。

你可以把 Retrofit 理解为:
“网络请求的自动化管家” —— 你只需要写接口,Retrofit 帮你完成 请求的创建、发送、解析、返回


2. 如果不用 Retrofit,会怎么写?(传统方式)

假设你要请求一个 AI 接口(类似 ChatGPT):

🔴 原始做法(手写 OkHttp 请求)

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
        .url("https://api.example.com/chat")
        .post(RequestBody.create(
            MediaType.parse("application/json"), 
            "{\"prompt\": \"你好,介绍一下 Retrofit\"}"
        ))
        .build();

Response response = client.newCall(request).execute();
String result = response.body().string();
System.out.println("AI 回复:" + result);

问题: ❌ 代码长、结构复杂
❌ 需要手动解析 JSON
❌ 不能自动管理线程


3. Retrofit 解决了什么问题?

Retrofit 让网络请求 像调用方法一样简单

用接口定义 API

public interface ChatApi {
    @POST("/chat")
    Call<ChatResponse> chat(@Body ChatRequest request);
}

创建 Retrofit 实例

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com")  // API 地址
        .addConverterFactory(GsonConverterFactory.create()) // 自动解析 JSON
        .build();
ChatApi chatApi = retrofit.create(ChatApi.class);

直接调用 API

ChatRequest request = new ChatRequest("你好,介绍一下 Retrofit");
chatApi.chat(request).enqueue(new Callback<ChatResponse>() {
    @Override
    public void onResponse(Call<ChatResponse> call, Response<ChatResponse> response) {
        System.out.println("AI 回复:" + response.body().getText());
    }
    @Override
    public void onFailure(Call<ChatResponse> call, Throwable t) {
        System.err.println("请求失败:" + t.getMessage());
    }
});

Retrofit 的优势:代码简洁:不用写一堆 OkHttp 代码
自动解析 JSON:不用 response.body().string()JSON.parse()
异步/同步请求:支持 Call(同步)和 enqueue(异步)
线程管理:可结合 RxJava 自动切换线程


4. Retrofit 的底层工作原理

Retrofit 本质上是 基于 OkHttp,做了封装: 1️⃣ 定义接口@GET@POST
2️⃣ 动态代理(生成网络请求代码)
3️⃣ 底层用 OkHttp 执行请求
4️⃣ 返回数据,并自动解析 JSON

Retrofit 让我们 不用关心底层 HTTP 细节,只需要专注于 API 逻辑。


5. 总结

Retrofit 就是一个“网络请求自动化工具”,简化 HTTP 请求,自动解析数据,让网络调用像本地方法一样简单! 🚀