首页 > 解决方案 > 按顺序发出多个具有不同请求主体的 API 请求

问题描述

用例:我需要使用 android 客户端(改造)在服务器中发送一些请求。在我得到第一个答案后,我需要更新发送对象的值(取决于我得到的最后一项)并重新发送它,直到所有数据都下载完毕。我想知道如何使用 Retrofit 和 RxJava 来实现这一点(我不想使用 while 循环等)

编辑:问题是,我不知道“平面地图”的确切数量,因为数据可能会变大或变小。我有 420000 条记录,每个请求我下载 1000 条数据

标签: javaandroidkotlinretrofit2rx-java2

解决方案


你可以flatMap他们,并在下一个中使用它的响应,通过使用it参数,这是前一个的响应。

mathApi.multiplyByTwo(1)
    .flatMap {
        mathApi.multiplyByTwo(it)
    }.flatMap {
        mathApi.multiplyByTwo(it)
    }.subscribe {
        // here "it" will be 4 (1*2*2) 
    }

如果您不知道最终将拥有多少flatMap个 s,例如,您可以使用递归函数来完成。

private fun multiplyByTwo(number: Int) {
    mathApi.multiplyByTwo(number).subscribe {
        if (it < Integer.MAX_VALUE) { // When you run out of data.
            multiplyByTwo(it)
        }
    }
}

推荐阅读