Запросы к API из Android

Для работы многих программ нужно обращаться к данным. Однако далеко не все данные могут храниться на устройстве, на котором запускается программа. Зачастую необходимо получать информацию из интернета. Например, запросить погоду по населённому пункту, чтобы отобразить её в программе. Причём большинство используемых приложений – мобильные. Как получить удалённую информацию с телефона Android? С помощью обращения к специальным API.

API

API (Application Programming Interface) – это то, как взаимодействуют друг с другом программы. Например, вы пишете программу, которая должна создавать Word-документ. Вы обращаетесь к библиотеке, которая вызывает API Word-а. Таким образом, ваша программа взаимодействует с его API.

Или, что ближе к теме статьи, вы пишете программу, которая будет отображать ближайшие матчи в Английской Премьер-Лиге. Для того, чтобы получать информацию о матчах, вы делаете запросы к API в интернете. Или вы хотите в рамках вашей программы делать запросы к GPT, парсить их и отображать пользователю вашей программы. Как это? Говоря просто, сделать запрос к API означает открыть ссылку, на которой расположен ресурс с этим API, и при необходимости передать параметры запроса – например, за какие сезоны нужно получить футбольные матчи или на какой вопрос должна ответить GPT. Как правило, это get-запросы.

Если вы нажмёте сюда, то попадёте на страничку API, который выдаёт случайные цитаты.

JSON

JSON расшифровывается как JavaScript Object Notation. Это текстовый формат, в котором передаются данные. JSON состоит из ключей (имён полей) и значений. Выглядит это так – “ключ”: “значение”.

Нагляднее всего вам покажет пример. Если вы перешли по ссылке на API, то увидели в окне браузера некоторый текст. Это и есть JSON, то есть объект с ответом на ваш запрос. Он содержит информацию о случайной цитате.

Вот так будет выглядеть ответ в формате JSON, если мы самостоятельно, не в рамках программы, вставим ссылку для доступа к API в адресную строку браузера.

JSON-объект с цитатой автора, полученный через API

Программа будет делать то же самое – обращаться к этой ссылке в надежде получить JSON, чтобы затем отобразить цитату и её автора в программе. Для расшифровки ответа в формате JSON мы будем использовать библиотеку Gson.

Gson

Библиотека Gson позволяет распарсить ответ, который пришёл в JSON, в удобный и понятный java-объект. Для сборщика проектов gradle нужно вставить следующую строку в блок dependencies в build.gradle:

Хорошо. Теперь необходимо написать тот самый java-объект, в который будет расшифровываться ответ. Это несложно – просто выделим данные, которые нас интересуют, и определим их как поля класса. А также добавим геттеры и конструктор. В JSON нас интересуют текст и автор цитаты, поэтому названия полей мы берём такие же, какими они прописаны в самом JSON: quoteText и quoteAuthor. Также добавим метод getFormattedAuthor(), чтобы возвращать автора цитаты заранее с приставкой (с). А если автор неизвестен – такое тоже бывает в этом API – то возвращать пустую строку.

Как видите, самый обычный java-объект.

Разрешение на интернет

На Android всё устроено очень строго. Если хотите воспользоваться интернетом – то есть сделать запрос к API, находящемуся в интернете – то необходимо прописать соответствующее разрешение. Дополнить будет нужно 2 файла.

Во-первых, нужно добавить следующую строчку в файл AndroidManifest.xml:

Отлично. А теперь вам нужно добавить ещё много строк в MainActivity.java. Это связано с тем, что разрешение, прописанное в AndroidManifest.xml, не всегда корректно может быть получено. Иногда сам пользователь его сразу не разрешил. Иногда – что-то другое. Поэтому, чтобы приложение не село в лужу после первой неудачи, превращаем MainActivity.java в сборник просьб выдать разрешение на интернет:

Отлично. Разрешения прописаны. Что делаем дальше?

Разметка интерфейса

Что самое важное в мобильном приложении? Функциональность? Скорость работы? Ха! Чтобы симпатично было.

Давайте настроим графические компоненты в файле разметки интерфейса main_activity.xml.

Xml-разметка интерфейса Android-приложения

Разметка интерфейса включает в себя 2 элемента TextView. Они позволяют отобразить сам текст цитаты и её автора под цитатой.

Чтобы центрировать не один, а оба эти элемента в совокупности, они обёрнуты в LinearLayout, который размещается в центре в ConstraintLayout.

Шрифт для цитаты я подобрала самый обычный serif. А вот шрифт для подписи автора решила взять рукописный caveat – его нужно установить в проект с помощью среды разработки. В случае с IntelliJ IDEA это сделать весьма просто.

Выделив нужный TextView, во вкладке Design при редактировании файла activity_main.xml необходимо выбрать параметр fontFamily, раскрыть выпадающий список и кликнуть More Fonts.

Выбор шрифта (fontFamily) в IntelliJ IDEA для Android

Выбор шрифта Caveat в IntelliJ IDEA для Android

Затем ищете подходящий шрифт, выделяете его и нажимаете OK (переключатель должен стоять на Create downloadable font). Всё, шрифт будет установлен, он будет доступен в проекте и для других текстов. Для выбранного TextView он даже пропишется самостоятельно в параметры в xml.

Вот получившийся код в файле activity_main.xml:

Интерфейс готов! Можно приступать к основной части – к отправке запросов и обработке ответов.

OkHttp3

Чтобы воспользоваться библиотекой для отправки http-запросов, необходимо её добавить в проект.

Давайте подключим эту библиотеку. Код для gradle:

Превосходно. Теперь будем заниматься запросами. Соорудим класс QuoteApi, который позволит получить цитату get-запросом к API с помощью библиотеки OkHttp3.

Класс, отвечающий за отправку запросов и конвертацию ответов, готов. Осталось внести пару строк в MainActivity, который будет использовать внутри себя этот самый класс QuoteApi.

Самый долгожданный момент. Когда уже можно будет посмотреть на результат? Прямо сейчас! Давайте запустим приложение и посмотрим, как оно работает.

Цитата Эрих Марии Ремарка в мобильном приложении, полученная через API
Цитата Джексона Брауна в мобильном приложении, полученная через API
Цитата Джонатана Свифта в мобильном приложении, полученная через API

Великолепно! Мы создали ШЕДЕВР. Спасибо большое создателям API за такой прекрасный источник цитат. Теперь-то, мои дорогие, вы сможете открывать это приложение каждый день и получать свою цитату на сегодня.

Причём работа с API никак не изменяется в зависимости от того, какое приложение их применяет. Это могут быть и запросы к API из консольного приложения.

API упрощает взаимодействие между различными программными компонентами. Используйте API других программ и ресурсов, которые уже существуют, вместо того, чтобы изобретать велосипед!

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