Прежде всего - вам настоятельно рекомендуется сделать свой клиент / бэкэнд устойчивым к возможности того, что ваш POST-запрос будет выполнен дважды. Даже если вы выполните sh вашу цель - выполнить его только один раз, вполне возможно, что запрос на клиенте (например, истекло время ожидания) потерпел неудачу, когда он действительно был выполнен на бэкэнде. Затем пользователь попытается повторить попытку и, по-видимому, столкнется с той же ошибкой. Поэтому лучше иметь клиентскую возможность повторять повторные попытки, а бэкэнд обрабатывать запрос идемпотентно, чем пытаться заставить клиент запрашивать данные один раз в плохой сети, что часто бывает на мобильном устройстве. Вам будет гораздо проще построить клиент, и ваши пользователи получат лучший опыт.
В любом случае, если вы хотите, чтобы Volley попытался выполнить запрос только один раз, передав DefaultRetryPolicy со вторым аргументом (maxNumRetries) = = 0, запрос должен быть выполнен только один раз, если вы используете HttpStack по умолчанию (HurlStack). Если по какой-то причине вы все еще используете стек HTTP Apache, этот стек может делать некоторые внутренние попытки, когда запросы не могут соединиться.
Можете ли вы запустить "adb shell setprop log.tag.Volley VERBOSE" для включить подробное ведение журнала, принудительно остановить и перезапустить приложение, а затем воспроизвести проблему и предоставить журналы от Volley, когда запрос происходит дважды? На каком устройстве / версии Android вы тестируете? Я ценю пример кода, но я не уверен, как его запустить, поскольку это всего лишь несколько исходных файлов, а не полностью функционирующая настройка.
В связанных вами потоках это может быть ошибка с HttpUrlConnection в некоторых ситуациях. Вы всегда можете расширить HurlStack и переопределить createConnection, чтобы попробовать некоторые из обходных путей, предусмотренных в этих ссылках (например, вызов setChunkedStreamingMode (0)). Если бы мы смогли идентифицировать набор устройств или другие обстоятельства, где это было необходимо, мы могли бы рассмотреть возможность включения этого в сам Volley.
Вы могли бы также попробовать попробовать другой стек HTTP с Volley, чтобы увидеть, работает ли он для вас , В настоящее время Volley не предоставляет никаких официальных сообщений, но есть много таких вещей, как OkHttp или Cr onet.
Я получил этот ответ от команды разработчиков Google Volley.