繁体   English   中英

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

[英]Merge results from multiple API calls without using RxJava?

参考这里答案,只是想知道,我们可以在不使用 RxJava 的情况下实现相同的功能吗? 比如使用MediatorLiveData可以组合多个实时数据源; 有没有办法从多个 API 调用中获取结果,只需使用 androidx 库?

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

  1. 普通回调 我想这种方式不需要评论。
  2. Kotlin 协程 为此,您需要将suspend添加到所有请求方法中,然后从协程内部调用它们,然后使用集合的方法组合所有结果,例如。 要使用协程,您必须使用 Kotlin(至少在代码的这个网络部分)并添加额外的协程依赖项。
  3. Java8 的 CompletableFuture 为此,您需要将CompletableFuture作为结果设置为所有请求方法,然后使用运算符thenCombine()组合结果。 要在 Android 中使用 Java8 的功能,您必须执行一些额外的步骤(文档)。

至于你提到的 LiveData,没有内置的方法可以让 Retrofit 的结果包装在 LiveData 中。 问题是 Retrofit 的结果不是实时的(例如,在 Room 框架中它们是实时的,并且结果有 LiveData-wrapper),因为没有到 API 服务器的实时连接正在等待。 我认为您可以为此获得一些适配器,然后使用 MediatorLiveData 但它不会是开箱即用的,无论如何您应该使用上述异步方法之一来处理 Retrofit 的响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM