You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中RxKotlin多参数逐个调用API并汇总结果方案求助

解决方案

方式一:用zip并行执行所有请求

zip会等待所有请求成功后返回汇总结果,任一请求失败则直接触发错误回调,适合无顺序要求、追求效率的场景。

实现代码

override fun deleteSingleVideoOneByOne(paths: ArrayList<String>) {
    val apiService = RetrofitInstance.getApiServiceXMLForR2(
        Constants.BASE_URL_NEW_CAMERA_R2_4K_PRO
    )

    // 把每个path转换成独立的API请求Observable
    val requestList = paths.map { singlePath ->
        apiService.r2NtKCommandExecute("6006", arrayListOf(singlePath))
            .subscribeOn(schedulerProvider.io())
    }

    trackDisposable(
        Observable.zip(requestList) { responses ->
            // 过滤并返回所有成功的响应
            responses.filterIsInstance<FunctionModel>()
        }
        .observeOn(schedulerProvider.ui())
        .subscribe({ allSuccessResponses ->
            // 全部请求成功,通知回调
            callback?.onSuccessDeleteAllVideos(allSuccessResponses)
        }, { error ->
            // 任一请求失败,触发错误处理
            handlerError(error)
        })
    )
}

方式二:用concatMap串行逐个执行请求

如果需要严格按顺序执行(上一个请求成功后才发起下一个),用concatMap,任一失败会终止后续请求并触发错误。

实现代码

override fun deleteSingleVideoOneByOne(paths: ArrayList<String>) {
    val apiService = RetrofitInstance.getApiServiceXMLForR2(
        Constants.BASE_URL_NEW_CAMERA_R2_4K_PRO
    )

    trackDisposable(
        Observable.fromIterable(paths)
            .concatMap { singlePath ->
                apiService.r2NtKCommandExecute("6006", arrayListOf(singlePath))
                    .subscribeOn(schedulerProvider.io())
                    // 可选:实时通知单个请求成功
                    .doOnNext { callback?.onSuccessDeleteSingleVideo(it) }
            }
            .toList() // 收集所有成功响应,仅当全部成功时执行
            .observeOn(schedulerProvider.ui())
            .subscribe({ allSuccessResponses ->
                callback?.onSuccessDeleteAllVideos(allSuccessResponses)
            }, { error ->
                handlerError(error)
            })
    )
}

注意事项

  1. 调整API参数:将原来的整个paths列表,改为每个请求传单个路径的列表(arrayListOf(singlePath)),确保接口能正确接收单个路径。
  2. 扩展回调接口:建议新增onSuccessDeleteAllVideos方法,用于传递全部请求成功的汇总结果。
  3. 错误处理:两种方式都会在任一请求失败时立即进入错误回调,符合你“任一失败返回失败响应”的需求。

内容的提问来源于stack exchange,提问作者MARSH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:53:19