Альтернативный способ получения прогресса при загрузке нескольких частей / форм (Android) - PullRequest
2 голосов
/ 14 июля 2010

Как описано в этом ответе , вы не можете получить ход загрузки POST из нескольких частей / форм в Android, используя только Android SDK, потому что существует проблема с буферизацией потока при использовании HttpURLConnection, которая будет исправлена пост Froyo (см. http://code.google.com/p/android/issues/detail?id=3164#c6).

Поскольку Apache HttpClient 3.1 был удален из SDK довольно рано, а новый HttpClient, который теперь является частью SDK, не был полностью принят (он пропускает многочастные возможности), вы можете добавить недостающие части (в частности, apache-mime4j -0.6.jar и httpmime-4.0.1.jar), чтобы выполнить загрузку multipart / form-data И захватить ход загрузки (также описано в ответе, упомянутом выше).

Итак, причина, по которой я открываю новый вопрос, заключается в том, что выполнение, как описано, приводит к огромному увеличению размера установленного приложения (в моем случае с 170 до 732 КБ).

Итак, вопрос в следующем: Есть ли другой способ выполнить загрузку данных multipart / form и получить процесс загрузки без значительного увеличения размера приложения? Существуют ли какие-либо другие библиотеки, которые можно использовать, или есть другой альтернативный способ, не упомянутый здесь?

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Интерфейс Apache HttpEntity концептуально довольно прост - это просто объект, который способен записывать себя в выходной поток и знает свой собственный тип MIME. Тип MIME из нескольких частей также довольно прост. Поэтому было бы довольно просто написать заменяющую реализацию MultiPartEntity, которая не имеет значительных внешних зависимостей и поэтому не раздувает ваше приложение так значительно.

0 голосов
/ 14 июля 2010

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

В любом случае, вот моя идея: вы можете отслеживать ход выполнения загрузки на стороне сервера (например, с использованием PHP и APC ).

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

У этого решения есть некоторые недостатки.Вот что я могу вспомнить прямо сейчас:

  • Сложный для реализации (отдельный поток, дополнительное HTTP-соединение, ..)
  • Вы также должны контролировать серверную частьи вносите в него изменения.
  • Во время загрузки вы создаете дополнительный интернет-трафик, который может замедлить загрузку и потреблять больше бесплатных мегабайт пользователей.
...