如何在RxJava中创建Observable列表?

时间:2017-11-12 04:56:44

标签: android rx-java rx-android reactivex

我有一个API,它给了我一个id列表。我需要使用这些ID来发出另一个网络请求,以获取各个项目的详细信息。一旦我得到了所有细节,我需要将它们放在一个列表中。

所以这是一个例子。提出网络请求,获取ID列表

1,2,3,4,5。

现在我需要针对这5个ID提出5个单独的请求。

然后,一旦我得到所有人的回复,我需要创建一个用于填充RecyclerView的列表。

如果需要进一步的信息,请告诉我。我是Reactive编程的新手。

4 个答案:

答案 0 :(得分:2)

让我们说你有一个可观察的来源:

Observable<Integer> source;

您想为每个ID执行网络请求:

Long getLongFromIdViaNetwork(Integer id);

你是这样写的:

source
  .flatMap( i -> Observable.fromCallable( id -> getLongFromIdViaNetwork( id ) ) )
  .toList()
  .subscribeOn( backgroundScheduler )
  .observeOn( foregroundScheduler )
  .subscribe( listOfLongs -> {} );

其中backgroundSchedulerforegroundScheduler适合我们的环境。

答案 1 :(得分:1)

可观察链将具有大致以下结构:

  • 初始网络请求
  • 从结果中提取列表
  • fromIterable
  • concatMapEager&lt; - 确保结果列表与列表中的相同。
    • 第二个网络请求
    • 从请求中提取响应
  • toList

答案 2 :(得分:1)

如果您只想接收包含列表的1个发射:使用Observable.just(1, 2, 3, 4, 5);

如果您希望收到5个排放,每个排放包含一个数字:使用Observable.from(1, 2, 3, 4, 5);

答案 3 :(得分:0)

伪代码: Observable.from(listOfIds).flatMap(return request(id))。toList()