Приложение "Погода в городе - Weather Viewer" использует бесплатные REST-совместимые веб-сервисы OpenWeatherMap.org для получения 16-дневного прогноза погоды для заданного города. Приложение получает данные в формате JSON. Результаты отображаются в ListView — компоненте для вывода списка с поддержкой прокрутки. В этом приложении использоваться пользовательский формат элементов списка:
- значок погодных условий,
- день недели с текстовым описанием погоды в этот день,
- самая высокая и самая низкая температура за день (по шкале Цельсия) и
влажность в процентах.
Для обращения к веб-сервису строка URL была преобразована в объект URL.
Затем объект URL использовался для открытия объекта HttpUrlConnection, в результате чего происходит обращение к веб-сервису через запрос HTTP.
Приложение читает все данные из потока InputStream класса HttpUrlConnection и помещает их в строку, а затем преобразует эту строку в JSONObject для обработки.
В приложении продемонстрировано, как организуется выполнение продолжительных операций за пределами потока GUI и получение результатов в потоке GUI с использованием объектов AsyncTask. Это особенно важно для обращений к веб-сервисам, время выполнения которых не детерминировано. Погодные данные выводятся в компоненте ListView, при этом данные для каждого элемента ListView поставляются при помощи субкласса ArrayAdapter.
Показанно, как повысить быстродействие ListView за счет использования паттерна View-Holder, при котором представления существующих элементов ListView используются заново при выходе элементов за границы экрана.
И наконец, использовались некоторые средства материального дизайна из библиотеки Android Design Support Library — компонент TextInputLayout оставляет подсказку EditText на экране даже после того, как пользователь начал вводить текст;
плавающая кнопка FloatingActionButton используется для отправки данных, введенных пользователем; компонент Snackbar отображает информационное сообщение для пользователя.
#REST-совместимые веб-сервисы,
#AsyncTask,
#HttpUrlConnection,
#обработка данных в формате JSON, JSONObject, JSONArray,
#ListView, ArrayAdapter, паттерн View-Holder,
#TextInputLayout, FloatingActionButton