RxJava和Observable在改造API上的调用

时间:2019-06-21 17:55:05

标签: android rx-java android-livedata

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

  1. 是否进行连续的API调用以从服务器获取最新结果?
  2. 如果是,那么它多久打一次电话?
  3. 调用一次,然后观察数据有什么用?
  4. 调用一次,我们应该只使用RxJava在代码中保存几行吗?在这种情况下,我们可以简单地使用实时数据。
  5. 在活动的每个生命周期调用一次,即(如果活动被杀死并再次打开,那么它将获取新结果?)

这是一个代码段:

// 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 个答案:

答案 0 :(得分:1)

那是...很多问题。

  1. 答案是“取决于”。 显示您的服务类别(在其中定义Retrofit调用)。 改型调用通常是Single而不是Observable,因为API将返回结果并结束调用,因此在这种情况下使用observable毫无意义(单是...一个结果或一个错误)。

  2. 一次:)

  3. 当您期望观察到的可观察对象发出值时(通过onNext),您可以观察到一个可观察对象,这样您就可以观察事物列表并逐一发出它的项。或者您可能有一个API,它是一个开放的套接字,不时地发出项目; RXJava可以帮助您订阅所述发射并处理每个项目(onNext()..)

  4. 如果您不使用RxJava,我会使用LiveData。 RX很不错,但是它非常庞大,如果您要做的只是调用翻新的Single api,我个人就不会为RX所困扰。 RX的力量来自众多(有时是无法理解或使用)操作员(地图,平面图,开关等)。及其超级流畅的API。它可以执行非常强大的功能,并且为此编写了许多适配器和扩展。它也可以被滥用来回地狱。除非我有一个特定的用例Rx非常擅长使用

  5. ,否则它是一个非常高级的工具,目的非常好,我今天不会使用。
  6. 这与RX无关,而与您的体系结构有关。您是否在生命周期方法中称呼改造? (例如onStart?)还是在用户互动时调用它(例如,按一个按钮)。无论哪种情况,RX都与它无关,除非被告知,否则不会调用任何东西。

更多信息

  • 如果您有一个API,它返回诸如Things之类的“ List<Thing>”列表,那么您可以考虑在服务类中使其成为Observable<Thing> getThings()。那可行。但这不是它的工作方式。该API可能会发送一个Array(这就是它作为列表的原因),因此实际上,它必须看起来像Observable<List<Thing>> getThings(),所以当您订阅时,它看起来就像(这是伪代码):
api.getThing()
    .blah()
    .blah()
    .subscribe(...)

订阅有3种方法:

onError onNextonComplete

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

这不是它的工作方式。如果您的API返回事物列表,则可能需要将其声明为:

Single<List<Thing>>,因为您的订阅实际上将具有2种方法,而不是3种方法:

onErroronSuccess(List<Thing> things)(如果名称不是100%准确,很抱歉,我已经有两年没有接触RX了)。如此看来,API要么返回列表,要么返回错误,不存在null,next,complete。收到列表后,您的订阅将不再发出

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