在不使用 RxJava 的情况下合并多个 API 调用的结果?
Merge results from multiple API calls without using RxJava?
参考,只是想知道,我们可以在不使用 RxJava 的情况下实现同样的效果吗?例如,使用 MediatorLiveData 可以组合多个实时数据源;有什么方法可以通过使用 androidx 库从多个 API 调用中获取结果?
我认为在不使用RxJava的情况下处理异步Retrofit请求(问题的核心是Retrofit响应的异步性)你有3个选择(也许我错过了什么):
- 普通回调。我想这种方式不需要评论。
- Kotlin 协程。为此,您需要将
suspend
添加到所有 request-methods,然后从协同程序内部调用它们,然后使用集合的方法组合所有结果,例如。要使用协同程序,您必须使用 Kotlin(至少在代码的 network-part 中)并添加额外的 coroutines-dependencies.
- 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 的响应。
参考
我认为在不使用RxJava的情况下处理异步Retrofit请求(问题的核心是Retrofit响应的异步性)你有3个选择(也许我错过了什么):
- 普通回调。我想这种方式不需要评论。
- Kotlin 协程。为此,您需要将
suspend
添加到所有 request-methods,然后从协同程序内部调用它们,然后使用集合的方法组合所有结果,例如。要使用协同程序,您必须使用 Kotlin(至少在代码的 network-part 中)并添加额外的 coroutines-dependencies. - 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 的响应。