【问题标题】:Adavantage of Retrofit with RxJava externally外部使用 RxJava 进行改造的优势
【发布时间】:2018-11-06 03:14:55
【问题描述】:

AFAAIK,Retrofit 在内部使用 RxJava。那么,如果我不想过滤、排序或修改从 api 接收到的数据,那么像 here 这样在外部将 Retrofit 与 RxJava 集成有什么好处?它会减少时间吗?从 api 获取响应?它在哪些方面有助于提高我们的 api 调用的性能?

【问题讨论】:

  • "AFAAIK, Retrofit uses RxJava internally." 我不这么认为
  • @pskink 你确定 Retrofit 内部不使用 RxJava 吗?因为面试官在接受采访时告诉我的
  • 获取sources并自行查看

标签: android retrofit rx-java


【解决方案1】:

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

【讨论】:

  • 谢谢..“而不是使用回调到代码中,您可以直接利用反应式范例的力量来检索结果”..但是 Rxjava 还包括像 onNext 这样的回调,我们在之后获取数据仅回调
  • 您是绝对正确的,但与您以“功能”方式使用 lambda 表达式的方式完全不同,保持代码干净、可测试,并且您只需几行代码就可以清楚地了解整个过程,无需使用匿名类或单独的类,而且您拥有难以置信的能力来进行所需的任何转换。很明显,RXJava 必须使用回调,因为我们一直在使用 Java,但我们在这里不是在用旧的方式谈论钩子方法。请参阅我在文本中所做的编辑
  • 很高兴为您提供帮助。如果问题对您有帮助,请考虑在两天后接受回复(绿旗)。
猜你喜欢
  • 1970-01-01
  • 2018-05-03
  • 2016-01-29
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2016-09-08
相关资源
最近更新 更多