Синхронный Android Запрос строки залпа - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь сделать синхронный запрос 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 не завершил его выполнение до того, как придет ответ сервера.

...