我是 RxJava 新手,想了解 Observable。因此,我正在使用改造进行一个 API 调用,并且我正在观察结果的变化,所以我的问题是:
- 它是否会继续进行 API 调用以从服务器获取最新结果?
- 如果是,那么调用的频率是多少?
- 调用一次那观察数据有什么用?
- 它是否只调用一次,那么我们应该使用 RxJava 只是为了在代码中保存几行?在这种情况下,我们可以简单地使用实时数据。
- 它是否在 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
}
});
最佳答案
这……有很多问题。
答案是“视情况而定”。 显示您的服务类(您定义 Retrofit 调用的位置)。 改造电话通常是
Single
而不是Observable
因为 API 将返回结果并结束调用,所以在这种情况下使用 observable 没有任何意义(Single 是...只是一个结果或错误)。一次:)
当你期望一个 Observable 发出值时(通过 onNext),你可以观察一个 Observable,这样你就可以观察一系列事物并获取其逐个发出的项目(例如)。或者你可以有一个 API,它是一个开放套接字,时不时地发出一些信息; RXJava 可以帮助您订阅所述发射并处理每个项目(onNext()..)
如果你不需要 RxJava,我会使用 LiveData; RX 很好,但它很大,如果你所做的只是调用改造单一 api,我个人不会为 RX 烦恼。 RX 的力量来自众多(有时无法理解或使用)操作符( map 、平面 map 、开关等)。及其超流畅的 API。它可以做非常强大的事情,并且有许多为其编写的适配器和扩展。它也可能被滥用到 hell 。这是一个中等高级的工具,具有非常好的用途,但我今天不会使用它,除非我有 Rx 真正擅长的特定用例。
这与 RX 无关,与您的架构有关。您是否在生命周期方法中调用改造? (比如 onStart?)或者您在用户交互时调用它(例如按下按钮)。无论哪种情况,RX 都与任何一种情况无关,并且除非被告知,否则不会调用任何内容。
更多信息
- 如果您有一个返回“
Things
”列表的 API,例如List<Thing>
,你会想做到Observable<Thing> getThings()
在您的服务级别中。那可行。但事实并非如此。 API 可能发送一个数组(这就是它是一个列表的原因),所以实际上,它必须看起来像Observable<List<Thing>> getThings()
,所以当你订阅时,它会看起来像(这是伪代码):
api.getThing()
.blah()
.blah()
.subscribe(...)
订阅有3种方法:
onError
onNext
和onComplete
如果你看OnNext
它看起来像 onNext(List<Thing> things)
因此,来自 Observable 的每次发射都是一个列表,而不是您最初想象的:“onNext(Thing thing)
,因此您可以将 things
添加到列表中。
事情不是这样的。如果您的 API 返回事物列表...您可能希望将其声明为:
Single<List<Thing>>
因为您的订阅本质上有 2 种方法,而不是 3 种:
onError
和onSuccess(List<Thing> things)
(如果名称不是 100% 准确,我深表歉意,我已经好几年没有碰过 RX 了)。所以你看,API 要么返回列表,要么返回错误,没有 null、没有 next、没有complete;一旦您获得列表,您的订阅将再也不会发出。
我希望这可以帮助您更多地了解使用 RxJava 的含义(这是一个 promise !)
关于android - RxJava 和 Observable 改造 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708336/