在 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 = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create()) // 关键
.build();
Observablepublic interface ApiService {
@GET("user/{id}")
Observable<User> getUser(@Path("id") String id);
}
Single(推荐,只发一次)@GET("user/{id}")
Single<User> getUser(@Path("id") String id);
apiService.getUser("123")
.subscribeOn(Schedulers.io()) // 网络请求在 IO 线程
.observeOn(AndroidSchedulers.mainThread()) // 主线程更新 UI
.subscribe(
user -> {
// 成功
},
throwable -> {
// 失败
}
);
apiService.login()
.flatMap(token -> apiService.getUserInfo(token))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
userInfo -> {},
error -> {}
);
Single.zip(
apiService.getA(),
apiService.getB(),
(a, b) -> new Result(a, b)
).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {});
apiService.getData()
.onErrorReturn(throwable -> defaultValue)
.subscribe(data -> {});
CompositeDisposableCompositeDisposable disposable = new CompositeDisposable();
disposable.add(
apiService.getUser("1")
.subscribe(...)
);
@Override
protected void onDestroy() {
disposable.clear();
}
| 技术 | 适合场景 |
|---|---|
| RxJava | 复杂数据流、老项目 |
| Kotlin 协程 | 新项目、更简洁 |
如果你愿意,我可以:
你更想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。