Rxjava实现多线程并发操作之上传多张图片

应用场景: 需要同时上传多张图片到服务器, 但是服务器提供的接口一次只接收一张图片.

  private fun uploadFile(paths: List<String>) {
val array = paths.toTypedArray()
        Observable.fromArray(*array)
                .flatMap(Function<String, Observable<MineMultiPicBean.ListBean>> {
                    val compressedFile = BitmapCompressUtil.load(mView as Context, File(it)).compress()
                    val imageBody = RequestBody.create(MediaType.parse("multipart/form-data"), compressedFile)
                    val part = MultipartBody.Part.createFormData("file", compressedFile.name, imageBody)
                    val autoId = RequestBody.create(MediaType.parse("text/plain"), mAutoId)
                    val type = RequestBody.create(MediaType.parse("text/plain"), mType)
                    mApiService.uploadmultiImage(part, hashMapOf("autoId" to autoId, "type" to type))
                            .doOnTerminate { compressedFile.delete() }
                            .subscribeOn(Schedulers.io())
                }).observeOn(AndroidSchedulers.mainThread())
                .compose(mView.syncLifecycle(ActivityEvent.DESTROY))
                .subscribe({
                    realList[realList.size - 1].apply {
                        template = it.template
                        thumb = it.thumb
                        templateId = it.templateId
                        uniqueId = it.uniqueId
                        autoId = it.autoId
                        type = it.type
                        check = false
                    }
                    realList.add(MineMultiPicBean.ListBean())
                    updateData(realList, true)
                }, { mView.showDialogError(it) }, { mView.complete() })
}

使用fromArray将List中的数据进行单个分发, 使用flatmap达到并行效果,关键在于要在返回的observable, 需要重新指定执行线程subscribeOn(Schedulers.io())

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载自:https://xiaobailong24.me/2017/03/18/Android-RxJava2.x...
    Young1657阅读 6,156评论 1 9
  • 一、RxJava操作符概述 RxJava中的操作符就是为了提供函数式的特性,函数式最大的好处就是使得数据处理简洁易...
    无求_95dd阅读 8,661评论 0 21
  • 一、RxJava操作符概述 RxJava中的操作符就是为了提供函数式的特性,函数式最大的好处就是使得数据处理简洁易...
    测天测地测空气阅读 3,818评论 0 1
  • 在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://...
    松江野人阅读 11,224评论 0 1
  • 04-09晨读 最重要的事情只有一件 早晨听到这个内容,让我不知所以从何写起,最重要的事情只有一件,明明我感觉重要...
    剽悍文霞阅读 1,315评论 0 1

友情链接更多精彩内容