我有一个POST api,它将1张图片(Multipart表格)作为参数(键是" document1")。我使用Retrofit v2.3.0和Rxjava(rxandroid)v2.0.1依赖项。
我想要实现的目标非常简单:上传四张图片并关闭当前活动;话虽如此,我必须称api 4 ,因为后端api一次只能拍摄 1 图像。
到目前为止,我所做的就是获取这四张图片的Uri
(无论是相机还是图片库),将这些图片转换为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的新手;如果有人知道这对我的问题有帮助,请指导。感谢。
答案 0 :(得分:0)
请求是异步处理的,这就是有时它与计数器4匹配并且活动完成的原因。