Okhttp3 запрос в асинхронной блокировке UI-потока при медленном интернете - PullRequest
0 голосов
/ 06 октября 2019

У меня проблема: когда я отправляю multipart / form-data, когда интернет-соединение медленное (например, тип = GSM и уровень сигнала = плохой). Когда соединение в порядке, на интерфейсе я вижу progressDialog, но когда я загружаю файл и соединение медленное, мой интерфейс перестает работать. Иногда я могу получить исключение Timeout.

Я пытался: выполнить asynctask на Executor (Пул потоков и Последовательный), разделить asynctask на 2 задачи.

Формирующий запрос:

File file = new File(Uri.parse(path).getPath());
RequestBody requestBody = RequestBody.create(MediaType.get("image/jpeg"), file);

final MultipartBody multipartBody = new MultipartBody.Builder()
       .setType(MediaType.get("multipart/form-data"))
       .addFormDataPart("uuid", uuid)
       .addFormDataPart("photo", file.getName(), requestBody)
       .build();

sendRequest(new Request.Builder()
       .url(BaseActivity.SERVER_PREFIX + "/photo")
       .post(multipartBody)
       .addHeader("Authorization", "Bearer " + token)
       .build());

Выполнение AsyncTask:

AsyncTaskResult<Response> response = new ExecuteRequestAsyncTask(client, context).execute(request).get();

AsyncTask включает:

@Override
protected void onPreExecute() {
    progress.show();
}

@Override
protected void onPostExecute(AsyncTaskResult<Response> responseAsyncTaskResult) {
    progress.dismiss();
}

@Override
protected AsyncTaskResult<Response> doInBackground(Request... requests) {
    try {
        return new AsyncTaskResult<>(client.newCall(requests[0]).execute());
    } catch (IOException e) {
        return new AsyncTaskResult<>(e);
    }
}

Я ожидал, что поток пользовательского интерфейса будет работать нормальнос AsyncTask, но это не так.

...