Использование AndroidHttpClient
В версии Android 2.2 появился новый подкласс HttpClient по имени AndroidHttp Client. В его основе лежит идея упрощения решения задач для разработчиков Android- приложений за счет предоставления стандартных значений и логики, подходящей для Android-приложений. Например, значения по умолчанию для тайм-аутов соединения и сокета (т.е. операции) составляют 20 секунд каждое. Диспетчером подключений по умолчанию является ThreadSafeClientConnManager. В большинстве случаев AndroidHttpClient взаимозаменяем с классом HttpClient, который использовался в предыдущих примерах. Ниже перечислены различия, которые следует иметь в виду.
• Для создания AndroidHttpClient вызывается статический метод newInstance() класса AndroidHttpClient, например:
AndroidHttpClient httpClient =
AndroidHttpClient.newInstance("cTpoKa-areHTa-http");
• Обратите внимание, что параметром метода newInstance() является строка агента HTTP. В стандартном браузере Android это может быть следующая строка, но использовать допускается любую другую:
Mozilla/5.0 (Linux; U; Android 2.1; en-us; ADR6200 Build/ERD79) AppleWebKit/530.17(KHTML, like Gecko) Version/ 4.0 Mobile Safari/530.17
• Вызов execute() на стороне клиента должен осуществляться из потока, отличного от потока пользовательского интерфейса. Это значит, что если вы просто попытаетесь заменить предыдущий HttpClient классом AndroidHttpClient, то получите исключение. Выдача HTTP-запросов из главного потока пользовательского интерфейса — плохая практика, поэтому AndroidHttpClient не позволяет это делать. Проблемы с потоками обсуждаются в следующем разделе.
• После завершения работы с экземпляром AndroidHttpClient должен быть вызван его метод close(). Это позволит корректно освободить занимаемую им память.
• Для работы со сжатыми ответами, поступающими от сервера, предусмотрено несколько удобных статических методов, включая перечисленные ниже:
• modifyRequestToAcceptGzipResponse(HttpRequest request)
• getCompressedEntity(byte[] data, ContentResolver resolver)
• getUngzippedContent(HttpEntity entity)
После получения экземпляра AndroidHttpClient нельзя ни модифицировать настройки параметров в нем, ни добавлять к нему новые настройки параметров (такие как, например, версия протокола HTTP). Допускается только переопределять настройки внутри объекта HttpGet, как было показано ранее, или вообще не пользоваться AndroidHttpClient.
На этом обсуждение использования служб HTTP с классом HttpClient завершено. В последующих разделах внимание будет переключено на другую интересную часть платформы Android: написание фоновых/длительно выполняющихся служб. Хотя это сразу и не очевидно, но процессы выдачи HTTP-запросов и написания служб Android связаны в том аспекте, что будет производиться немало работы по интеграции с этими службами. Возьмем, к примеру, простое приложение почтового клиента. На устройстве с Android приложение такого типа, как правило, состоит из двух частей: одна часть предоставляет пользовательский интерфейс, а другая отвечает за опрос почтовых сообщений. Скорее всего, опрос будет осуществляться внутри фоновой службы.
Компонент, опрашивающий наличие новых сообщений, будет представлять собой службу Android, которая, в свою очередь, будет использовать HttpClient для выполнения своей работы.
На заметку! Великолепное руководство по использованию HttpClient и другим концепциям доступно на сайте Apache по адресу http://hc.apache.org/httpcomponents-client-ga/ tutorial/html/.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.