Использование WEB API в вашем Android приложении

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

Есть два основных, широко используемых формата данных, это XML и JSON. XML расшифровывается как eXtensible Markup Language (расширяемый язык разметки), и его синтаксис напоминает еще один язык разметки — HTML (Hyper Text Markup Language).  Ниже пример XML:

JSON расшифровывается как JavaScript Object Notation, и это намек на то, что формат был разработан специально для JavaScript’а. JSON более стандартизирован, и более понятен для человека. Ниже пример JSON:

В этой статье мы будем использовать JSON.  А чтобы было еще проще разобраться, наше приложение будет состоять всего из нескольких элементов и принцип работы у него будет такой:

  • EditText — для ввода текста.
  • Button — для отправки запроса к API.
  • TextView — для отображения результатов запроса.

Теперь нам нужно определиться какое API мы будем использовать. Не долго думая, я остановился на GitHub API, тем более, что оно у них открыто и даже не требует авторизации.

AndroidManifest.xml

Нашему приложению, нужен доступ в интернет, поэтому мы должны описать это разрешение в AndroidManifest.xml файле. Обратите внимание, что запрос на такое разрешение должен быть перед тегом <application>.

Activity Layout

У нас будет очень простой Layout, как я уже писал выше он будет из EditText, в который мы будем вводить логин пользователя на  GitHub, кнопка для отправки запроса к API, под ними будет расположен TextView (обернутый в ScrollView), который просто будет отображать полученный JSON, и ProgressBar который по умолчанию будет спрятан с помощью android:visibility=»gone». ProgressBar будет появляться когда мы нажмем на кнопку и исчезать когда данные будут получены и выведены на экран.

Main Activity

Прежде, чем мы начнем писать код для, хотелось бы обратить Ваше внимание, на очень важный момент. Android приложения, версии ниже Ice Cream, могли открывать подключения к сети и делать запросы из основного потока пользовательского интерфейса. В связи с этим приложение переставало реагировать, пока ждет ответ. Сейчас же правила ужесточились, и сетевые запросы теперь должны выполняться в отдельном потоке.  К нашему с вами счастью все уже сделали за нас, и теперь есть специальный класс который называется AsyncTask. Если сравнивать с Web, то он очень похож на Jquery.

Чтобы использовать возможности AsyncTask, нам нужно унаследоваться от него, и предоставить 3 общих типа — Params, Progress и Result. Params относится к параметрам, которые будут разобраны вашим Task’ом, Progress относится к типу индикатор прогресса/счетчика, а Result — это то, что будет возвращено по окончанию выполнения задачи. У AsyncTask есть 4 важных метода, onPreExecute (перед выполнением задачи), doInBackground (выполнение непосредственно самой задачи), onProgressUpdate (что делать, чтобы показать прогресс), и onPostExecute (после того как задача выполнена ).

Из приведенного выше кода, RetrieveFeedTask наследуется от  AsyncTask<Void, Void, String>, который указывает тип Params Void, Progress Void и Result String.

В методе onPreExecute, мы показываем ProgressBar, и чистим содержимое TextView. Это делается до того, как задача начинает выполняться.

Метод doInBackground ожидает Params, который в нашем случае Void. После этого мы создаем и открываем HttpURLConnection, чтобы сделать запрос API. URL адрес состоит из домена и имени пользователя, который мы ввели в EditText.

Метод onPostExecute скрывает ProgressBar, и отображает полученный ответ в TextView.

В заключении

В этом примере мы вообще ничего не делаем с JSON’ом который возвращается к нам. Обычно возвращаемый JSON преобразуется в Java Object, и дальше работают уже с объектами. Есть разные библиотеки для манипулирования и использования JSON объектов (например GSON и Jackson). А также есть более простой org.json пакет, который по умолчанию встроен в Android. Разобрать ответ в JSONObject, можно примерно следующим образом:

Комментарии

Добавить комментарий