从相机或相册得会图片地址
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("成功上传图片") }) }