Android-Как справиться с неполной загрузкой изображений - PullRequest
0 голосов
/ 29 ноября 2011

В приложении, над которым я сейчас работаю, мы позволяем пользователю загружать изображения на наш сервер.Я делаю это в потоке asyncTask и использую httpMime и отправляю изображение в виде байтового массива в одно из полей составной сущности.Я бы сказал, что в 80% случаев это прекрасно работает.Изображения отображаются на сервере в таблице mySql, так как longBlob не проблема.Остальные 20 процентов изображения теряются при загрузке из-за различных изменений в условиях сети или на более старых, менее способных устройствах, которые я тестировал на (HTC dream / tmobile G1), память выкалывала бы.Проблемы с памятью, с которыми я столкнулся, добавили серию блоков catch, чтобы больше не было проблем.Я пытался поиграть с httpconnectionparams, но я не уверен, что это сильно повлияло на проблему.

Как бы то ни было ..... теперь мне нужно небольшое руководство о том, как обрабатывать изображения, потерянные из-за сетевых проблем, таких каккак задержка, переключается с 4g на край и другие проблемы, такие как полная потеря покрытия.Я думал о фоновом сервисе, который проверял бы любые возвращаемые объекты с сервера и, если объект не имел изображения, связанного с ним, поставил в очередь фоновый сервис, чтобы повторить загрузку.Моя главная проблема не в том, что изображение не попадает на мой сервер во время тестирования, но иногда при тестировании во время вождения или где-нибудь на границе сервисного центра приложение передает только частичное изображение, которое я вижу в своей базе данных.

Итак ..... на этот раз мой вопрос к сообществу: как вы справились с такой проблемой?Один из способов, которым я пытался попробовать, - это отправлять фактический размер файла вместе с многочастной передачей на сервер, и если, когда изображение достигает установленного мной php, и не совпадает с размером int, представляющим размер файла, отправьте обратнозначение флага в ответе.Затем, основываясь на ответе, приложение возвращается, оно может снова запустить асинхронную задачу для повторной загрузки фотографии.Этот подход был бы довольно прост в настройке, но я хотел бы что-то более надежное, и, кроме того, если бы пользователь долго не освещал ситуацию, у меня был бы этот процесс зомби, разжевывающий их батарею ... ничего хорошего.

Как всегда, любая помощь по этому вопросу с мнениями, ссылками или другой помощью будет принята с благодарностью:)

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

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

0 голосов
/ 29 ноября 2011
  1. Я действительно сомневаюсь, что вы справились с проблемами памяти только с помощью блоков try / catch (если только вы не под словом «handle» имели в виду: «он не падает, потому что мы больше не позволяем этим пользователям загружать большие изображения»).
  2. Какую библиотеку вы используете для HTTP-соединений? Я спрашиваю об этом, потому что недавно столкнулся с проблемой OOM при загрузке.
  3. Я также немного сбит с толку относительно ваших неудачных загрузок, ваш сервер должен возвращать соответствующий ответ, и ваш клиент должен ожидать этого. Все, кроме (скажем) 200, должно привести к тому, что пользовательский интерфейс Android сообщит пользователю, что загрузка изображения не удалась и что он должен повторить попытку. Ваш AsyncTask (надеюсь, вы его используете) должен перехватить эти исключения и обработать их соответствующим образом. Если с вашим сервером что-то не так, вы не должны возвращать 200 с при «половинной загрузке», об отключенных соединениях и подобных случаях.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...