在不使用 RxJava 的情况下合并多个 API 调用的结果?

Merge results from multiple API calls without using RxJava?

参考,只是想知道,我们可以在不使用 RxJava 的情况下实现同样的效果吗?例如,使用 MediatorLiveData 可以组合多个实时数据源;有什么方法可以通过使用 androidx 库从多个 API 调用中获取结果?

我认为在不使用RxJava的情况下处理异步Retrofit请求(问题的核心是Retrofit响应的异步性)你有3个选择(也许我错过了什么):

  1. 普通回调。我想这种方式不需要评论。
  2. Kotlin 协程。为此,您需要将 suspend 添加到所有 request-methods,然后从协同程序内部调用它们,然后使用集合的方法组合所有结果,例如。要使用协同程序,您必须使用 Kotlin(至少在代码的 network-part 中)并添加额外的 coroutines-dependencies.
  3. Java8 的 CompletableFuture。为此,您需要将 CompletableFuture 作为结果设置为所有 request-methods,然后使用运算符 thenCombine() 组合结果。要在 Android 中使用 Java8 的功能,您必须执行一些额外的步骤 (piece of documentation)。

至于您提到的 LiveData,没有 built-in 方法可以让 Retrofit 的结果包含在 LiveData 中。问题是 Retrofit 的结果不是 live(例如在 Room 框架中,结果是 LiveData-wrapper),因为没有 live 连接到 API 服务器正在等待。我认为您可以为此获得一些适配器,然后使用 MediatorLiveData 但它不会是 out-of-the 框,您无论如何都应该使用上述异步方法之一来处理 Retrofit 的响应。