Я пытаюсь сделать синхронный запрос PUT с помощью Volley внутри WorkManager. Вот моя функция
private void UploadImages() throws InterruptedException, JSONException, ExecutionException {
final StringRequest imageUploadRequests[] = new StringRequest[urls.length];
imageFuture = RequestFuture.newFuture();
for (int i = 0; i < urls.length; i++) {
imageUploadRequests[i] = imageUploadRequestGenerator(urls[i], imageStrings[i]);
Volley.newRequestQueue(getApplicationContext()).add(imageUploadRequests[i]);
String imageResponse = imageFuture.get();
}
}
Проблема в том, что фактический ответ сервера приходит после выполнения imageFuture.get (). И в случае каких-либо проблем соответствующие исключения не генерируются, а просто регистрируются Volley.
Вот моя imageUploadRequestGenerator()
функция:
/*
* This function generates the String requests for each image that needs to be uploaded.
* */
private StringRequest imageUploadRequestGenerator(final String url, final String imageString) {
StringRequest imagePutRequest = new StringRequest(
Request.Method.PUT,
url,
imageFuture,
imageFuture
) {
//Headers that tell the server what to do
//In this case, process data is false.
@Override
public Map<String, String> getHeaders() {
Map<String, String> parameters = new Hashtable<>();
parameters.put("processData", "false");
return parameters;
}
//Define your body content type here.
//PNG Image.
@Override
public String getBodyContentType() {
return ("image/png");
}
//Send the Body here. In case of Image, always send a blob.
@Override
public byte[] getBody() {
try {
byte[] blob_image = Base64.decode(imageString, 0);
return blob_image;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
};
imagePutRequest.setRetryPolicy(new DefaultRetryPolicy(
DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 50,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES * 2,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
));
return (imagePutRequest);
}
Может ли кто-нибудь здесь помочь ? Мне нужно, чтобы запрос был синхронным, чтобы Work Manager не завершил его выполнение до того, как придет ответ сервера.