android - RxJava 和 Observable 改造 API 调用

标签 android rx-java android-livedata

我是 RxJava 新手,想了解 Observable。因此,我正在使用改造进行一个 API 调用,并且我正在观察结果的变化,所以我的问题是:

  1. 它是否会继续进行 API 调用以从服务器获取最新结果?
  2. 如果是,那么调用的频率是多少?
  3. 调用一次那观察数据有什么用?
  4. 它是否只调用一次,那么我们应该使用 RxJava 只是为了在代码中保存几行?在这种情况下,我们可以简单地使用实时数据。
  5. 它是否在 Activity 的每个生命周期调用一次,即(如果 Activity 被终止并再次打开,那么它将获取新结果?)

这是一个代码 fragment :

// fetching list of recipes
 mRecipeListViewModel.getRecipes().observe(this, new Observer<List<Recipe>>() {
            @Override
            public void onChanged(@Nullable List<Recipe> recipes) {
                // showing list of recipes
            }
        });

最佳答案

这……有很多问题。

  1. 答案是“视情况而定”。 显示您的服务类(您定义 Retrofit 调用的位置)。 改造电话通常是 Single而不是Observable因为 API 将返回结果并结束调用,所以在这种情况下使用 observable 没有任何意义(Single 是...只是一个结果或错误)。

  2. 一次:)

  3. 当你期望一个 Observable 发出值时(通过 onNext),你可以观察一个 Observable,这样你就可以观察一系列事物并获取其逐个发出的项目(例如)。或者你可以有一个 API,它是一个开放套接字,时不时地发出一些信息; RXJava 可以帮助您订阅所述发射并处理每个项目(onNext()..)

  4. 如果你不需要 RxJava,我会使用 LiveData; RX 很好,但它很大,如果你所做的只是调用改造单一 api,我个人不会为 RX 烦恼。 RX 的力量来自众多(有时无法理解或使用)操作符( map 、平面 map 、开关等)。及其超流畅的 API。它可以做非常强大的事情,并且有许多为其编写的适配器和扩展。它也可能被滥用到 hell 。这是一个中等高级的工具,具有非常好的用途,但我今天不会使用它,除非我有 Rx 真正擅长的特定用例。

  5. 这与 RX 无关,与您的架构有关。您是否在生命周期方法中调用改造? (比如 onStart?)或者您在用户交互时调用它(例如按下按钮)。无论哪种情况,RX 都与任何一种情况无关,并且除非被告知,否则不会调用任何内容。

更多信息

  • 如果您有一个返回“Things ”列表的 API,例如 List<Thing> ,你会想做到 Observable<Thing> getThings()在您的服务级别中。那可行。但事实并非如此。 API 可能发送一个数组(这就是它是一个列表的原因),所以实际上,它必须看起来像 Observable<List<Thing>> getThings() ,所以当你订阅时,它会看起来像(这是伪代码):
api.getThing()
    .blah()
    .blah()
    .subscribe(...)

订阅有3种方法:

onError onNextonComplete

如果你看OnNext它看起来像 onNext(List<Thing> things)因此,来自 Observable 的每次发射都是一个列表,而不是您最初想象的:“onNext(Thing thing),因此您可以将 things 添加到列表中。

事情不是这样的。如果您的 API 返回事物列表...您可能希望将其声明为:

Single<List<Thing>>因为您的订阅本质上有 2 种方法,而不是 3 种:

onErroronSuccess(List<Thing> things) (如果名称不是 100% 准确,我深表歉意,我已经好几年没有碰过 RX 了)。所以你看,API 要么返回列表,要么返回错误,没有 null、没有 next、没有complete;一旦您获得列表,您的订阅将再也不会发出

我希望这可以帮助您更多地了解使用 RxJava 的含义(这是一个 promise !)

关于android - RxJava 和 Observable 改造 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708336/

相关文章:

android - 安卓手机的蓝牙设备类别有哪些?

android - 单击弹出窗口中的编辑文本时出现设计问题?

android - 仅更改 TextInputLayout 提示文本样式

android - 在 Kotlin 中使用 Android 数据绑定(bind)初始化 RecyclerView 会引发错误。我究竟做错了什么?

Spring Boot 2 - 从 RestControler 返回 rx.Observable

java - Observable.zip 和 Observable.timer

android - Kotlin Flow 与 Android LiveData

java - 如何使用Android Room存储数据记录

android-recyclerview - 双向数据绑定(bind)、RecyclerView、ViewModel、Room、LiveData、Oh My

android - Observable.retrywhen 中的异常类型