Retrofit使用・原理详解

前言:Retrofit‌是一个非常流行的Android网络请求框架,主要用于简化HTTP请求的编写和执行。

一、使用简介

1.1 Retrofit的工作原理:

定义一个接口,并使用注解指定HTTP请求的方法、URL、参数等。通过动态代理模式,在运行时生成接口的实现类,该实现类负责发起网络请求。通过OkHttp客户端发送HTTP请求,处理响应,并通过Converter将响应数据转换为对象。支持同步和异步回调,通过CallbackAdapterFactory处理回调逻辑‌。

1.2 Retrofit使用步骤:

  • 添加依赖‌: 在项目的build.gradle文件中添加Retrofit的依赖。
  • 定义接口‌:创建一个接口,使用注解定义HTTP请求的方法和参数。
  • 创建Retrofit实例‌:通过Retrofit.Builder配置baseUrl、添加转换器等,然后创建Retrofit实例。
  • 创建接口实例‌:通过Retrofit实例创建接口的动态代理实例。
  • 发送请求‌:调用接口实例的方法发送请求,处理响应。

1.3 代码示例:

// 定义接口
public interface ApiService {
    @GET("/users/{username}")
    Call<User> getUser(@Path("username") String username);
}

// 创建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
        .client(new OkHttpClient())
        .baseUrl("https://api.github.com/")
        .addConverterFactory(GsonConverterFactory.create())//设置数据解析器
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 添加RxJava适配器
        .build();
ApiService service = retrofit.create(ApiService.class);

// 发送请求
Call<User> userCall = service.getUser("test");
userCall.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        // 处理响应数据
    }

    @Override
    public void onFailure(Call<User> call, Throwable t) {
        // 处理错误情况
    }
});

二、流程分析

3.1 流程图

在这里插入图片描述

3.2 流程讲解

1. 创建Retrofit实例;

2. 创建网络请求接口和相关属性注解;

3. 通过动态代理解析请求接口的注解,并生成网络请求对象;

4. 通过CallAdapter进行平台适配,平台包括(Android/java8/iOS);

5. 通过OkHttpCall发送网络请求;

6. 通过Converter数据转换适配器转换交易返回的数据;

7. 通过线程切换执行器切换到主线程;

三、源码分析

 Retrofit retrofit = new Retrofit.Builder()
      .baseUrl("https://github.com")
      .addConverterFactory(GsonConverterFactory.create())
      .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
      .build();

3.1、Retrofit类内部的成员变量

public final class Retrofit {
  private final Map<Method, ServiceMethod<?, ?>> serviceMethodCache = new ConcurrentHashMap<>(); //网络请求缓存,如:请求方法、请求头、请求体,各种适配器等
  final okhttp3.Call.Factory callFactory; //okhttp工厂,真正发送交易的处理类
  final HttpUrl baseUrl; //请求url前半部,基地址
  final List<Converter.Factory> converterFactories; //数据转换器工厂集
  final List<CallAdapter.Factory> adapterFactories; //网络请求适配器工厂集
  final @Nullable Executor callbackExecutor; //异步请求结果线程切换执行器
  final boolean validateEagerly; //标志位、是否马上解析接口方法
...
}

3.2、Retrofit内部类Builder

public final class Retrofit {
...
  public static final class Builder {
    private final Platform platform; //适配平台,通常默认android
    private @Nullable okhttp3.Call.Factory callFactory; //okhttp网络请求工厂,默认okhttp
    private HttpUrl baseUrl; //基地址
    private final List<Converter.Factory> converterFactories = new ArrayList<>(); //数据转换器集,用于生产数据转换器,默认GsonConverterFactory
    private final L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值