У меня проблема: когда я отправляю 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, но это не так.