Правильный способ обработки сетевых запросов для плохих соединений? - PullRequest
0 голосов
/ 07 июня 2018

Это должно быть общая проблема, но до сих пор я нигде не слышал и не читал об этом.

Итак, проблема в том, что когда мы отправляем сетевой запрос (POST запросы критичны) с мобильного телефонаприложение на сервер, иногда пользователь отключается от Интернета до получения ответа, а retrofit (сетевая библиотека Android) отвечает с ошибкой подключения, хотя запрос был отправлен на сервер.Таким образом, сервер создал новую запись для этого запроса, но пользователь не знал об этом.

И, увидев ошибку соединения, пользователь снова пытается создать такую ​​же запись, и в результате мы получаем дублированные записи.

Каковы возможные решения для этого?Хотя наше приложение построено на Android, эта проблема должна быть общей и известной многим разработчикам.

Мы отключаем кнопку в приложении до тех пор, пока не получим ответ от сервера, поэтому нажатие кнопки в быстрой последовательности не является проблемой.

Что мы думаем

  • Получите UUID от сервера для любого нового запроса и отправляйте UUID с каждым запросом, чтобы сервер отбрасывал UUID после его использования.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Проверьте библиотеку Volley: https://developer.android.com/training/volley/

Volley - это библиотека HTTP, которая упрощает и ускоряет работу в сети для приложений Android.

Если сервер не отвечает на ваш запрос и приложениебыло принудительно закрыто использование исключения try-catch и тоста "The Connection ...".

0 голосов
/ 07 июня 2018

Вы можете увеличить лимит времени ожидания в Retrofit для медленного соединения в вашем классе приложений (где вы инициализируете OkHttpClient ). Установите там лимит времени ожидания соединения.

// OkHttpClient client = httpClient.addInterceptor(interceptor).build();

//use this client object

     OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(1, TimeUnit.MINUTES)
                        .readTimeout(600, TimeUnit.SECONDS)
                        .writeTimeout(650, TimeUnit.SECONDS)
                        .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...