繁体   English   中英

使用rxjava改造多图像上传问题

[英]Retrofit multiple image upload issue using rxjava

我有一个POST api,它以1幅图像(多部分形式)作为参数(键为“ document1”)。 我正在使用带有Rxjava(rxandroid)v2.0.1依赖项的Retrofit v2.3.0。

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

到目前为止,我要做的是获取这四个图像的Uri (从相机或画廊获取),将这些图像转换为Multipart(这些部分起作用,!)。

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

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

我一次在活动中调用上述方法,请检查是否选择了4张图片:
uris含有4点不同的URI,
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的新手。 如果有人知道这对我的问题有所帮助,请进行指导。 谢谢。

请求被异步处理,这就是为什么有时它与计数器4匹配并且活动完成的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM