Intereting Posts
Всплывающее окно PopupMenu PopupWindow $ PopupViewContainer Как изменить андроид неопределенный цвет ProgressBar? Ускорить скорость анимации «Навигационный ящик» при закрытии? Когда присутствует интернет-соединение, и я нажимаю «проверить обновление» в Android Studio, я получаю сообщение «Connection Failed» Пользовательская панель поиска, разрезающая края, Как установить значок для диалога в Android Как отобразить HTML-страницу из необработанной папки в res с Android-сайтом Android? Программная клавиатура Android переключает между цифровым и буквенным программным обеспечением PreferenceManager.setDefaultValues ​​readAgain параметр и новые настройки Osmdroid – более высокий уровень масштабирования? Android Asset Studio: создание значков с изображением не работает ACTION_SCREEN_ON и ACTION_SCREEN_OFF не работают? RecyclerView не прокрутка Не удалось решить: com.android.support.design:25.4.0 Glide force загружает кешированное изображение, не волнует, какое разрешение

DownloadManager – понимание ERROR_HTTP_DATA_ERROR

Мое приложение сильно зависит от компонента DownloadManager от android для загрузки файлов с приблизительным размером 3-10 мегабайт.

При масштабировании (до миллионов загрузок) большая картина понятна:

~ 50% всех загрузок не выполняется из-за ERROR_HTTP_DATA_ERROR .

Я получаю эту информацию от Google Analytics

Согласно документации, этот код ошибки означает:

Значение COLUMN_REASON, когда ошибка получения или обработки данных произошла на уровне HTTP.

Я нашел эту документацию не очень информативной.
Есть много ошибок HTTP.

И как насчет отключения сети в середине загрузки? Также вызывает ошибку ERROR_HTTP_DATA_ERROR после отказа от попыток повторной попытки менеджера загрузки?

Было бы здорово, если бы кто-то помог мне понять:

  • Есть ли способ получить от DownloadManager больше информации о точной ошибке HTTP?
  • Какие наиболее распространенные ситуации ERROR_HTTP_DATA_ERROR могут быть запущены менеджером загрузки?

Еще один момент, который стоит упомянуть: в то время как эти ошибки возникают – пользователь подключен к сети WIFI (я устанавливаю диспетчер загрузки для загрузки только через Wi-Fi)

Пожалуйста, не предлагайте мне вообще не использовать диспетчер загрузки. Я знаю об этом варианте, преимуществах и недостатках. Я сохраняю этот вариант как последнее средство.

Solutions Collecting From Web of "DownloadManager – понимание ERROR_HTTP_DATA_ERROR"

Глядя на источник DownloadManager ERROR_HTTP_DATA_ERROR возвращается методом getErrorCode(int) это точная строка:

  case Downloads.Impl.STATUS_HTTP_DATA_ERROR: return ERROR_HTTP_DATA_ERROR; 

android.provider.Downloads имеет статусы, которые маскируются здесь с собственными константами класса DownloadManager , в своем источнике :

 public static final int STATUS_HTTP_DATA_ERROR = 495; 

Теперь вам нужно выяснить, что вызывает ошибку HTTP 495 . После Googling я пришел узнать, что этот код ответа на ошибку относится только к Google и часто создается при загрузке приложений из игрового магазина.

Исправлено предложение Go to Settings - Apps- All- Download manager and Clear data.

Поэтому в заключение моих ограниченных исследований я думаю, что это основная проблема, связанная с реализацией DownloadManager а не проблема с сетью или сервером, и поскольку нет определенного решения / обходного пути (мои друзья также столкнулись с подобной ситуацией), вы должны попробовать другие альтернативы.

Какие наиболее распространенные ситуации ERROR_HTTP_DATA_ERROR могут быть запущены менеджером загрузки?

Не видя никакого кода, это угадывает работу. Из документов:

Если возникла ошибка HTTP, это будет содержать код состояния HTTP, как определено в RFC 2616.

Это даст вам стандартную ошибку HTTP, из которой вы можете найти код состояния 6.1.1 и фразу причины . Если у вас есть миллионы загрузок, и это из-за ограниченного количества сайтов, это может быть проблемой, которая выходит за рамки вашего приложения, поскольку серверы веб-сайта могут не справляться с трафиком.

И как насчет отключения сети в середине загрузки?

Проблемы с подключением к Интернету могут вызвать проблемы;

 "408" ; Section 10.4.9: Request Time-out 

Также вызывает ошибку ERROR_HTTP_DATA_ERROR после отказа от попыток повторной попытки менеджера загрузки?

Возможно. Для того, чтобы он мог выкинуть этот тип ошибки, он должен быть проблемой с приложением, которое связывается с и / или пытается и / или заканчивает загрузку на веб-сайте.

Есть ли способ получить от DownloadManager больше информации о точной ошибке HTTP?

Помимо использования try и уловов и регистрации ошибок в соответствующих методах, когда ваше приложение использует DownloadManager , а затем тестирование и ожидание logcat, когда вы получите эту ошибку, другим вариантом будет удаленное использование библиотеки или стороннего инструмента для получения Удаленное протоколирование ошибок и отчеты о сбоях вашего развернутого приложения.

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

Что касается онлайн-ошибок и сбоев, ACRA является открытым исходным кодом и предоставляет эту функцию. Это использовало для использования продуктов Google для свободного хранения отчетов, но по мере увеличения использования Google отменила эту поддержку, однако есть функции, предлагаемые ACRA и другими провайдерами, или вы можете управлять своими отчетами, но это может повлечь за собой расходы.

Реализация этого в коде приложения довольно прямолинейно, создав класс, который подключается к вашему приложению, расширяя класс приложения и запуская его с помощью приложения.

 import org.acra.*; import org.acra.annotation.*; @ReportsCrashes( formUri = "http://www.backendofyourchoice.com/reportpath" ) public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } } 

Вам также нужно будет настроить отчет о завершении работы, а также подробные сведения о том, как это сделать, по мере увеличения параметров. Более подробную информацию можно найти здесь, BasicSetup .

Этот блог от The Cheese Factory дает подробное представление о настройке и других вариантах онлайн-отчетов об ошибках. Как настроить ACRA, систему отслеживания сбоев на Android-приложениях, на своем собственном сервере приложений Crash Reports на Android

Это будет означать обновление вашего приложения, но вам все равно придется делать это по звукам.

Трудно точно сказать, в чем причина ошибки, которую вы получаете. Код ошибки, который вы получаете, является слишком общим.

Что я буду делать, чтобы решить проблему:

  1. Попытайтесь выяснить, существует ли какая-либо корреляция между нагрузкой сервера или активностью сервера и количеством сбоев загрузки. Это поможет определить, возникла ли проблема на сервере. Если это так – вы можете увеличить свои ресурсы на стороне сервера или попытаться найти способ уменьшить нагрузку на свои серверы, чтобы свести к минимуму проблемы, связанные с загрузкой. Тяжелые нагрузки на сервер или большое количество одновременных загрузок могут вызывать проблемы, подобные тем, которые у вас есть (бутылки, тайм-ауты, заблокированные ресурсы на стороне сервера и т. Д.).

  2. Если вы придете к выводу, что ваша проблема на стороне клиента – я бы подумал о замене Android Download Manager другим или написать ваш выигранный код, чтобы загрузить файл (ы).

Я должен сказать, что предложение г-жи Иветт добавить больше протоколирования важно. Я делаю это во всех своих приложениях. После того, как вы разместите дополнительную информацию о проблеме, мы сможем выявить проблему и решить ее быстрее.