Обработка исключений
Обработка исключений является неотъемлемой частью любого приложения, а в программном обеспечении, использующем внешние службы (такие как службы HTTP), исключениям должно уделяться дополнительное внимание из-за большей вероятности возникновения ошибок. Во время работы со службами HTTP можно ожидать множества типов исключений. Существуют исключения транспорта, исключения протокола и тайм-ауты. Важно хорошо понимать, когда могут возникать исключения упомянутых типов.
Транспортные исключения могут возникать по множеству причин, но наиболее вероятный сценарий в случае мобильного устройства связан с неустойчивым подключением к сети. Исключения протокола — это исключения, возникающие на уровне протокола HTTP. К ним относятся ошибки аутентификации, некорректные cookie-наборы и т.д. Исключения протокола можно ожидать, например, если в HTTP-запросе должны передаваться регистрационные данные, но этого не сделано. Тайм-ауты в контексте HTTP-запроса бывают двух видов: тайм-ауты соединения и тайм-ауты сокета. Таймаут соединения может возникнуть, если HttpClient не удается подключиться к HTTP- серверу, к примеру, из-за его недоступности. Тайм-аут сокета может произойти, если HttpClient не получает ответ в течение определенного периода времени. Другими словами, HttpClient может подключиться к серверу, но тот не возвращает ответ в рамках выделенного временного промежутка.
Теперь, когда известны типы исключений, возникает вопрос: как иметь с ними дело? К счастью, HttpClient представляет собой надежную платформу, снимающую большую часть бремени с ваших плеч. В действительности заботиться нужно только и тех типах исключений, которыми легко управлять. Класс HttpClient берет на себя обработку транспортных исключений, проверяя состояние транспортировки и повторно отправляя запросы (что очень хорошо подходит для этого типа исключений). Исключения протокола в общем случае могут быть ликвидированы во время разработки. Наиболее вероятными исключениями, с которыми придется иметь дело, являются тайм-ауты. Простой и эффективный подход в отношении обработки тайм-аутов обоих типов — и соединения, и сокета — предусматривает помещение вызова метода execute () запроса HTTP внутрь блока try/catch и повторную выдачу запроса в случае сбоя. Это демонстрируется в е 15.5.
Код в е 15.5 показывает, как реализовать простой техники повторения для восстановления после тайм-аутов при выполнении HTTP-запросов. В е приведены два метода: один запускает HTTP-запрос GET (executeHttpGet ()), а второй помещает его в логику повторения запроса (executeHttpGetWithRetry()). Код очень прост. Количество попыток повторения устанавливается равным 3, после чего начинается цикл while. Внутри этого цикла выполняется запрос. Обратите внимание, что запрос находится в блоке try/catch, и в блоке catch осуществляется проверка, не превышено ли количество попыток повторения.
При использовании класса HttpClient в реальном приложении необходимо уделять внимание проблемам, связанным с многопоточностью, которые могут возникать. Давайте рассмотрим это прямо сейчас.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.