使用rxjava改进多个图像上载问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用rxjava改进多个图像上载问题相关的知识,希望对你有一定的参考价值。

我有一个POST api,它将1张图像(Multipart表格)作为参数(键是“document1”)。我正在使用Retrofit v2.3.0和Rxjava(rxandroid)v2.0.1依赖项。

我想要实现的非常简单:上传四个图像并关闭当前活动;话虽这么说,我必须拨打api 4次,因为后端api一次只能拍摄1张图像。

到目前为止,我所做的是获取这四个图像的Uris(无论是来自相机还是图库),将这些图像转换为Multipart(这些部分有效,p!)。

现在,我的api调用实现如下:

 @Multipart
 @POST("upload_image.php")
 Observable<ImageUploadResponse> uploadProblemImages(@Part MultipartBody.Part part);

我在我的活动中调用了上述方法一次,我检查我选择了4个图像: uris含有4种不同的uris, prepareFilePart()将我的图像转换为Multipart 和CompositeDisposable mCompositeDisposable = new CompositeDisposable();onCreate()创建

 for (Uri uri : uris)
        mCompositeDisposable.add(getApiInterface___().uploadProblemImages(prepareFilePart("document1", uri)).
                observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(this::handleResponse, this::handleError));

handleResponse是每次调用此方法时递增整数count的方法,如果它等于4,我完成当前活动。

private void handleResponse(ImageUploadResponse imageUploadResponses) {
    Toast.makeText(mContext, "success" + imageUploadResponses.getMsg(), Toast.LENGTH_SHORT).show();
    Log.e("hit", imageUploadResponses.getMsg());
    count++;
    Log.e("count", String.valueOf(count));// logging the success count
    if (count == 4) {
        Toast.makeText(mContext, "Problem has been added successfully", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent();
        intent.putExtra(STR_KEY_IDENTIFIER, mIdentifier);
        setResult(Activity.RESULT_OK, intent);
        count = 0;
        finish();
    }
}

但由于某些原因,我在logcat中看到了计数,并注意到活动在上传完成之前完成,每次在logcat中计数值为2或1或3。但是,奇怪的是我在数据库中获得了所有4个图像。

所以,我真正想做的是了解我已经成功上传了4张图片,然后才完成当前的活动。我是RxJava的新手;如果有人知道这对我的问题有帮助,请指导。谢谢。

以上是关于使用rxjava改进多个图像上载问题的主要内容,如果未能解决你的问题,请参考以下文章

RxJava2:如何改进并行数据下载和缓存?

使用表单元素上载图像时出错

如何取消订阅RxKotlin / RxJava中的Flowable?

无法将变量从控制器传递到模型以处理codeigniter中的多个上载字段

markdown RxJava和Glide下载多个GIF图像

AS3 / AIR:尝试上载文件时出现IOStream错误