Kotlin+Rxjava从相册相机获取图片后批量上传导致的退出界面问题

从相机或相册得会图片地址

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    //刷新界面
    when(requestCode){
        Constants.REQUEST_CODE_PHOTO_CAREMA ->{//相机
            if (resultCode != RESULT_CANCELED) {
                if (hasSdcard()) {
                    if (tempFile != null) {
                        val path = FileUtil.getRealFilePathFromUri(this, Uri.fromFile(tempFile))
                        val pathList = mutableListOf<String>()
                        pathList.add(path)
                        startThread(pathList as java.util.ArrayList<String>)
                    } else {
                        toast("相机异常请稍后再试!")
                    }
                } else {
                    toast("未找到存储卡,无法存储照片!")
                }
            }

        }
        Constants.REQUEST_CODE_PHOTO_GALLERY ->{//相册
            if (resultCode == RESULT_OK && data!=null) {
                val pathList = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT)
                //用RXJAVA线程调度显示和处理图片
                startThread(pathList)
            }

        }
    }
}
//RXJAVA线程切换将图片地址处理,并在主线程显示图片

private fun startThread(pathList: java.util.ArrayList<String>) {
    Observable.create(object : ObservableOnSubscribe<MutableList<Observable<Entity>>> {
        override fun subscribe(e: ObservableEmitter<MutableList<Observable<Entity>>>) {
      //IO线程中处理地址
            e.onNext(getObservableList(pathList))
        }
    }).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<MutableList<Observable<Entity>>> {

                override fun onComplete() {

                }

                override fun onNext(observableList: MutableList<Observable<Entity>>) {
                    showImages(pathList)
                    uploadImgList(observableList)
                }

                override fun onSubscribe(d: Disposable) {
                }


                override fun onError(e: Throwable) {
                }

            })
}

//将图片LIst转成observableList,用于RXJAVA 的merge批量操作

fun getObservableList(pathList : java.util.ArrayList<String>): MutableList<Observable<Entity>> {
    val list = mutableListOf<Observable<Entity>>()
    pathList.withIndex().forEach {(_,path)->
        val picString = ImageHandle.encode(path, 300, 300)// 获取文件路径后对位图片进行64处理
        val observable = ServerApi.updateImage(picString)
        list.add(observable)
    }
    return list
}
//批量上传图片
fun uploadImgList(observableList: MutableList<Observable<Entity>>){
    //显示图片

    showLoadingDialog()

    Observable.merge(observableList).subscribe({
        mImageList.add(it.data.toString())
    },{
        dismissLoadingDialog()
        if(mImageList.isEmpty()){
            toast("上传全部图片失败,请稍后重试或选少一点图片")
        }else{
            toast("上传部分图片失败")

        }
    },{
        dismissLoadingDialog()
        toast("成功上传图片")
    })

}


猜你喜欢

转载自blog.csdn.net/natetom/article/details/80403422