【问题标题】:Combine three APIs' result in RxKotlin在 RxKotlin 中组合三个 API 的结果
【发布时间】:2020-03-12 10:47:27
【问题描述】:

我在存储库中有一个函数,它调用三个返回三种不同类型对象的 API。

fun scanSource(code: String) =
    firstApi.DataV11Get(code)
        .flatMap {
            firstApi.sccGet(it.sscc)
        }
        .flatMap {
            lastApi.lsccGet(it.id)
        }

目前它只返回 ViewModel 中最后一个 API 的结果。现在我想在 viewmodel 中获得所有这些的结果。

加上 api 必须是连续的,因为它们使用的是最后一个 API 中的数据。

此外,每个 API 返回不同的对象类型。一旦所有三个调用都完成,我想要所有三个对象。

谢谢

【问题讨论】:

    标签: android kotlin rx-kotlin


    【解决方案1】:

    在你的 Api repo 中声明这个函数

       fun getJobs(contractor_id: String): Observable<JobListModel> {
        return Observable.zip(
            apiInterface.pendingJobs(contractor_id, 0, 5),
            apiInterface.activeJobs(contractor_id, 0, 5),
            apiInterface.completedJobs(contractor_id, 0, 5),
            apiInterface.cancelledJobs(contractor_id, 0, 5),
            Function4<PendingJobResponseModel, ActiveJobResponseModel, CompletedJobResponseModel, CancelledJobResponseModel, JobListModel> { p, a, c, ca ->
                JobListModel(p, a, c, ca)
            }
        )
    }
    

    这是对多个请求和模型进行压缩的方法。

    更多详细解释请参考此链接Rxjava Android how to use the Zip operator

    映射所有响应的 Job ListModel 类

    class JobListModel(
    val pendingJobResponseModel: PendingJobResponseModel,
    val activeJobResponseModel: ActiveJobResponseModel,
    val completedJobResponseModel: CompletedJobResponseModel,
    val cancelledJobResponseModel: CancelledJobResponseModel) : Serializable
    

    【讨论】:

    • 什么是 JobListModel?
    • 它基本上是一个模型类构造函数,它接受所有 4 个响应
    • 哦,你的意思是自定义类?不错
    • 但是如果 activeJobs() API 需要从 pendingJobs() 返回的对象的值怎么办?
    • 所以你可以先调用那个 Api 并取值并制作 zip 的其余两个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多