[英]Updating Image upload complete status in database using retrofit and 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.