#java #android #retrofit #rx-java
Вопрос:
У меня есть приложение, которое отправляет изображение на сервер и ждет ответа, но во многих случаях ответ занимает слишком много времени, и изображение отправляется неправильно и автоматически переходит к последнему изображению, которое находится в цикле for.
Вот код функции для отправки изображения
for (int i = 0; i < evidences.size(); i ) {
order = ordersEv.get(i);
Toast.makeText(this, "MOBMX: " ordersEv.get(0), Toast.LENGTH_SHORT).show();
File filesDir = this.getCacheDir();
File photo = new File(filesDir, "" ordersEv.get(i) ".jpeg");
try {
photo.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(photo);
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.write(ticketsEv.get(i));
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), photo);
MultipartBody.Part body = MultipartBody.Part.createFormData("image", photo.getName(), requestFile);
//RXJava
int finalI = i;
apiService.uploadPodOffline(getString(R.string.uploadPodOfflinePetition), body, RequestBody.create(MediaType.parse("text/plain"), ordersEv.get(i)))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UserData>() {
@Override
public void onSubscribe(@NotNull Disposable d) {
}
@Override
public void onNext(@NotNull UserData userData) {
try {
processResult(userData.getMsg(), userData.getData(), ordersEv.get(finalI));
} catch (Exception e) {
Toast.makeText(OnlineEvidenceActivity.this, "Error procesando la respuesta del servidor, por favor intente de nuevo", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(@NotNull Throwable e) {
}
@Override
public void onComplete() {
Toast.makeText(getApplicationContext(), "Lote procesado.", Toast.LENGTH_SHORT).show();
}
});
}
Ошибка, которая возникает, когда изображение не обрабатывается правильно, является
HTTP FAILED: java.net.ProtocolException: expected 422764 bytes but received 425984
Это мой интерфейс ApiService:
@Multipart
@POST("mobile/uploadpodoffline")
Observable<UserData> uploadPodOffline(@Header("petition") String petition,
@Part MultipartBody.Part image,
@Part ("order") RequestBody order);
Есть идеи, как сделать цепной вызов, чтобы избежать ошибки в ответе (?)
Спасибо.