Retrofit 在 RxJava 之前作为项目开始,您曾经通过回调检索 API。然后出现了 RXJava,并且可以在两者之间进行更严格的集成。因此,您可以使用 Observable/Flowable 接口更改 Call<T>,而不是使用对代码的回调,您可以直接利用响应式范式的强大功能来检索结果。
请考虑您必须在构建 Retrofit 时指定您使用的是 RXJava
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl);
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//here
.addConverterFactory(GsonConverterFactory.create())
.build();
说 RXJava 在内部实现 Retrofit 有点棘手,Retrofit 保持独立,只是 RXJava 提供了一些绑定代码,以便您可以将 Retrofit2 调整为 Observable。
这段代码取自here,说明如何绑定两者
public interface UserService {
@POST("/me")
Observable<User> me();
}
// this code is part of your activity/fragment
Observable<User> observable = userService.me();
observable
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {
// handle completed
}
@Override
public void onError(Throwable e) {
// handle error
}
@Override
public void onNext(User user) {
// handle response
}
});
然后你问了很多问题,在 stackoverflow 中你会得到一个回复。
请考虑使用 RXJava 和 Retrofit 集成的优点很多,例如你有一个更干净,可测试的,你不必考虑并发问题。关于我得到的性能与正常情况相同。
编辑:
要更好地了解何时使用 RXJAVA+Retrofit 以及何时只使用 Retrofit,您可以查看post
除了该内容之外,请考虑在单个类中以功能方式查看所有继承非常有用,加上您有 OnComplete,您可以操作任何类型的转换。
而且here更容易组合多个调用,在现实生活中优势非常明显,
并且做测试和保持代码干净,这两个单独来看,是两个很大的优势。
您可能还想通过 Retrofit 探索新的 Google 架构功能组件,您可以在其中使用 RXJava 或 LiveData