Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在不使用RxJava的情况下合并多个API调用的结果?_Android_Retrofit_Android Mvvm - Fatal编程技术网

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

Android 在不使用RxJava的情况下合并多个API调用的结果?,android,retrofit,android-mvvm,Android,Retrofit,Android Mvvm,提到这个问题,我只是想知道,不使用RxJava我们能实现同样的效果吗?例如,使用MediatorLiveData可以组合多个实时数据源;是否有任何方法可以通过使用androidx库从多个API调用中获得结果?我认为在不使用RxJava的情况下处理异步改装请求(问题的核心是改装响应的异步性)有3种选择(可能我遗漏了一些东西): 普通回调。我想这种方式不需要评论 科特林合作项目。为此,您需要向所有请求方法添加suspend,然后从协同程序内部调用它们,然后使用集合的方法组合所有结果,例如。要使用协同

提到这个问题,我只是想知道,不使用RxJava我们能实现同样的效果吗?例如,使用MediatorLiveData可以组合多个实时数据源;是否有任何方法可以通过使用androidx库从多个API调用中获得结果?

我认为在不使用RxJava的情况下处理异步改装请求(问题的核心是改装响应的异步性)有3种选择(可能我遗漏了一些东西):

  • 普通回调。我想这种方式不需要评论
  • 科特林合作项目。为此,您需要向所有请求方法添加
    suspend
    ,然后从协同程序内部调用它们,然后使用集合的方法组合所有结果,例如。要使用协同路由,您必须使用Kotlin(至少在代码的这个网络部分中)并添加额外的协同路由依赖项
  • Java8的完整未来。为此,您需要将
    CompletableFuture
    设置为所有请求方法的结果,然后使用操作符
    thenCombine()
    组合结果。要在Android中使用Java8的功能,您必须执行一些额外的步骤()

  • 至于你们提到的LiveData,并没有内置的方法可以让改造的结果包装在LiveData中。问题是,改造的结果不是live(例如,在Room framework中,结果是LiveData包装的),因为没有到API服务器的live连接。我想你可以为此找到一些适配器,然后使用MediatorLiveData,但这不是现成的,你应该使用上面提到的异步方法之一来处理改造的响应。

    我刚刚在谷歌上搜索了coroutines和CompletableFuture,这两个方法都很有趣。乍一看,协同程序似乎更容易理解,代码看起来更清晰。我会先试试协同程序。就个人而言,你会建议哪一个?我的大部分代码已经在Kotlin中,我已经在使用Java 8了。我想在大多数项目中,您会遇到RxJava或协同程序来处理异步工作,在一些项目中,我遇到了LiveData的自定义适配器。这个决定是自以为是的。Kotlin的总体趋势是使用协同程序,但这不是黄金法则。就个人而言,我会使用协同程序。