【问题标题】:How do you create a list of Observables in RxJava?如何在 RxJava 中创建 Observable 列表?
【发布时间】:2017-11-12 04:56:43
【问题描述】:

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

所以这里是一个例子。发出网络请求,获取 id 列表说

1、2、3、4、5。

现在我需要对这 5 个 ID 分别发出 5 个请求。

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

如果需要更多信息,请告诉我。我是响应式编程的新手。

【问题讨论】:

  • 结果列表应该包含什么?您能否提供一些代码(数据类)?

标签: android rx-java rx-android reactivex


【解决方案1】:

假设您有一个可观察的来源:

Observable<Integer> source;

你想为每个 ID 做一个网络请求:

Long getLongFromIdViaNetwork(Integer id);

你可以这样组合它们:

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

backgroundSchedulerforegroundScheduler 适合我们的环境。

【讨论】:

    【解决方案2】:

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

    • 初始网络请求
    • 从结果中提取列表
    • 来自Iterable
    • concatMapEager
    • 第二个网络请求
    • 从请求中提取响应
  • 到列表
  • 【讨论】:

      【解决方案3】:

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

      如果您想接收 5 个发射,每个发射包含一个数字:使用 Observable.from(1, 2, 3, 4, 5);

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-08
          • 1970-01-01
          相关资源
          最近更新 更多