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



i有一个帖子API,该帖子将1张图像(多部分)作为参数(key是" document1")。我正在使用rxjava(rxandroid)v2.0.1依赖项使用Raturofit v2.3.0。

我想实现的目标真的很简单:上传四个图像并关闭当前活动;话虽这么说,我必须将API 4 次数为后端API一次仅拍摄 1 图像。

到目前为止,我所做的就是获取这四个图像的Uri(无论是从相机还是画廊中),将这些图像转换为多个(这些零件工作,phew!)。

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

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

我一次在我的活动中调用上述方法,我检查我选择了4个图像:
uris包含4个不同的URI,
prepareFilePart()会将我的图像转换为多部分
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 ,i finish 当前活动。<<<<<<<<<<<<<<<<<<<<

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匹配并且活动完成。

最新更新