温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

RxJava与Retrofit怎么结合

发布时间:2026-09-01 14:30:27 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

在 Android / Java 网络请求开发中,Retrofit 负责定义和发起请求,RxJava 负责异步数据流处理,二者结合非常常见。下面从「基本用法 → 常见操作 → 注意事项」一步步说明。


一、基本依赖

implementation 'io.reactivex.rxjava3:rxjava:3.x.x'
implementation 'io.reactivex.rxjava3:rxandroid:3.x.x'
implementation 'com.squareup.retrofit2:retrofit:2.x.x'
implementation 'com.squareup.retrofit2:converter-gson:2.x.x'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.x.x'

注意:RxJava2 用 adapter-rxjava2,RxJava3 用 adapter-rxjava3


二、Retrofit 配置(关键)

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) // 关键
        .build();

三、定义接口(返回 Observable / Single)

1️⃣ 返回 Observable

public interface ApiService {
    @GET("user/{id}")
    Observable<User> getUser(@Path("id") String id);
}

2️⃣ 返回 Single(推荐,只发一次)

@GET("user/{id}")
Single<User> getUser(@Path("id") String id);

四、发起请求(结合 RxJava)

apiService.getUser("123")
    .subscribeOn(Schedulers.io())        // 网络请求在 IO 线程
    .observeOn(AndroidSchedulers.mainThread()) // 主线程更新 UI
    .subscribe(
        user -> {
            // 成功
        },
        throwable -> {
            // 失败
        }
    );

五、常用操作符示例

✅ 1. 扁平化请求(串行)

apiService.login()
    .flatMap(token -> apiService.getUserInfo(token))
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(
        userInfo -> {},
        error -> {}
    );

✅ 2. 合并多个请求(并行)

Single.zip(
    apiService.getA(),
    apiService.getB(),
    (a, b) -> new Result(a, b)
).subscribeOn(Schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(result -> {});

✅ 3. 错误处理

apiService.getData()
    .onErrorReturn(throwable -> defaultValue)
    .subscribe(data -> {});

六、生命周期管理(很重要)

使用 CompositeDisposable

CompositeDisposable disposable = new CompositeDisposable();

disposable.add(
    apiService.getUser("1")
        .subscribe(...)
);

@Override
protected void onDestroy() {
    disposable.clear();
}

七、RxJava + Retrofit 的优势

  • ✅ 链式调用,逻辑清晰
  • ✅ 线程切换简单
  • ✅ 轻松处理多个接口组合
  • ✅ 错误统一处理

八、RxJava or 协程?

技术 适合场景
RxJava 复杂数据流、老项目
Kotlin 协程 新项目、更简洁

如果你愿意,我可以:

  • ✅ 给你一个完整 Demo
  • ✅ 对比 RxJava vs 协程
  • ✅ 讲 背压 / 线程切换原理

你更想看哪一个?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI