...
🤳 Блог Android новостей, посвященный советам экспертов, новостям, обзорам, телефонам Android, приложениям, инструкциям, планшетам и мобильным телефонам.

Использование API: начало работы с дооснащением на Android

1 223

Сегодня редко можно встретить приложение для Android, которое никогда не подключается к Интернету.

Независимо от того, выполняет ли ваше приложение резервное копирование данных в облако, аутентифицирует пользователей с помощью функции «Войти в Google», загружает изображения или размещает контент на сайтах социальных сетей, многие приложения должны поддерживать регулярную связь с удаленными серверами.

Сеть стала таким основным продуктом мобильных приложений, что существует широкий спектр библиотек, специально разработанных, чтобы помочь вам извлекать данные с удаленных серверов и обмениваться данными с более широким Интернетом.

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

К концу этой статьи вы создадите приложение для Android, которое отправляет HTTP-запрос к бесплатному JSONPlaceholder API, обрабатывает ответ и затем отображает эту информацию пользователю в виде прокручиваемого RecyclerView.

Retrofit – это типобезопасный HTTP-клиент для Android, который позволяет подключаться к интерфейсу программирования веб-приложений (API). Вы можете использовать Retrofit для подключения к Twitter API, чтобы вы могли отображать последние твиты в своем приложении, получать информацию о последних блокбастерах с помощью API базы данных фильмов (TMDb) или проверять прогноз через Weather API.

Как сделать запрос на модернизацию?

Чтобы сделать запрос на модернизацию, вам понадобится следующее:

  • Класс Retrofit: здесь вы создадите экземпляр Retrofit и определите базовый URL-адрес, который ваше приложение будет использовать для всех своих HTTP-запросов. В нашем приложении базовый URL-адрес будет https://jsonplaceholder.typicode.com/.
  • Интерфейс, определяющий операции HTTP: здесь вы будете описывать каждый запрос на модернизацию, который вы хотите сделать, используя специальные аннотации модернизации, которые содержат подробные сведения о параметрах и методе запроса.
  • POJO: это класс модели данных, который обеспечивает автоматическое отображение ответа сервера, поэтому вам не нужно выполнять какой-либо анализ вручную.
  • Синхронный или асинхронный сетевой запрос: после того, как вы создали свой сетевой запрос, вам необходимо выполнить его и указать, как ваше приложение должно обрабатывать ответ – будь то успех или неудача.

После создания этих компонентов структура вашего проекта должна выглядеть примерно так:

Использование API: начало работы с дооснащением на Android

Существует множество API, но мы будем использовать JSONPlaceholder, поддельный REST API, разработанный для людей, которым нужен легкий доступ к поддельным данным, например тех, кто тестирует новую библиотеку или приложение, или кто-то, кто следит за онлайн-руководством! В частности, мы будем использовать ресурс API «/ users», который предоставляет список имен.

Использование API: начало работы с дооснащением на Android

Начало работы: сериализация и десериализация с Gson

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

Для отправки HTTP-запросов нам понадобится последняя версия Retrofit, но нам также понадобится специальный конвертер.

В большинстве случаев запросы и ответы сервера отображаются в нейтральном для языка формате, таком как JSON, а не предоставляются как объекты Java. Когда вы используете Retrofit, вам обычно приходится иметь дело с сериализацией и десериализацией данных JSON:

  • Сериализация: это процесс преобразования структур данных или состояния объекта в формат, который можно сохранить.
  • Десериализация: это процесс, при котором структура данных извлекается из серии байтов.

По умолчанию Retrofit может десериализовать HTTP-тела только в тип ResponseBody OkHttp, но вы можете поддерживать другие типы, используя другие конвертеры.

Существуют различные конвертеры, доступные для разных форматов, но мы будем использовать Gson, библиотеку Java, которая может преобразовывать объекты Java в их представление JSON. Он также может преобразовывать строки JSON в их эквивалентные объекты Java. Одним из основных преимуществ использования Gson является то, что вам не придется выполнять дополнительную настройку в ваших классах Java, поскольку ответ будет отображаться автоматически.

После того, как мы успешно получили данные с сервера, мы отобразим их в виде списка. Я также добавляю RecyclerView и CardView в качестве зависимостей проекта.

После добавления этих зависимостей ваш файл build.gradle на уровне проекта должен выглядеть примерно так:

dependencies {
   implementation fileTree(dir: 

Поскольку мы будем связываться с удаленным сервером, вам также необходимо открыть манифест проекта и добавить разрешение в Интернете:

<?xml version="1.0" encoding="utf-8"?>

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

Определение конечных точек с помощью HTTP-аннотаций

Затем давайте создадим интерфейс, содержащий информацию о конечных точках API, с которыми мы хотим взаимодействовать. Конечная точка – это просто URL-адрес, с которого мы хотим получить некоторую информацию, в данном случае это https://jsonplaceholder.typicode.com/users. Мы укажем базовый URL (https://jsonplaceholder.typicode.com) в другом месте нашего проекта, поэтому сейчас нам просто нужно определить относительный URL-адрес конечной точки, то есть «/ users».

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

Retrofit поддерживает следующие встроенные аннотации для каждого из стандартных типов запросов:

  • GET: метод, помеченный @GET, отвечает за обработку HTTP-запроса GET, где данные извлекаются с сервера. Это аннотация, которую мы будем использовать для получения списка имен.
  • POST: метод, помеченный @POST, отвечает за обработку HTTP-запроса POST, по которому вы отправляете данные на сервер.
  • PUT: этот метод будет обрабатывать HTTP-запрос PUT, где мы предоставляем некоторые данные и просим сервер сохранить их под определенным URL-адресом.
  • DELETE: этот метод будет обрабатывать HTTP-запрос DELETE, в котором указывается ресурс, который следует удалить.
  • HEAD: этот метод обрабатывает HTTP-запрос HEAD. HEAD похож на GET, за исключением того, что метод @HEAD извлекает информацию без соответствующего тела ответа. Используя аннотации @HEAD, вы можете получить данные, записанные в заголовке ответа, без необходимости извлекать остальную часть этого содержимого.

В нашем приложении мы будем использовать аннотацию @GET, чтобы сделать простой HTTP-запрос GET на относительный URL-адрес, который дает нам следующее:

@GET

Большинство конечных точек объявляются с определенным типом возвращаемого значения в формате Call . В нашем приложении возвращаемым типом будет «RetroUsers», который мы скоро реализуем.

Чтобы создать этот интерфейс:

  • Выберите «Файл»> «Создать»> «Класс Java» на панели инструментов Android Studio.
  • В следующем меню откройте раскрывающийся список «Тип» и выберите «Интерфейс».
  • Дайте этому интерфейсу имя «GetData» и нажмите «ОК».
  • Откройте новый интерфейс «GetData» и добавьте следующее:
package

Чтобы упростить задачу, этот интерфейс содержит одну конечную точку, но вы можете включить несколько конечных точек в один интерфейс.

Создание модели данных

Затем нам нужно создать класс, который предоставляет методы получения и установки для каждого поля, которое мы ожидаем в объекте ответа.

Мы также собираемся использовать аннотацию @SerializedName, которая указывает, что поле должно быть сериализовано с предоставленным именем, а не стандартным именем поля API.

Чтобы создать эту модель:

  • Выберите «Файл»> «Создать»> «Класс Java» на панели инструментов Android Studio.
  • Назовите этот класс «RetroUsers» и нажмите «ОК».
  • Откройте новый класс «RetroUsers» и добавьте следующее:
package

Создание экземпляра Retrofit

Следующим шагом будет использование класса Retrofit.Builder для создания экземпляра Retrofit, где мы вызовем нашу конечную точку и получим список имен.

После создания нашего объекта Retrofit нам нужно указать:

  • Фабрика преобразователей по умолчанию, которой в данном случае является Gson. Вы применяете преобразователь с помощью метода addConverterFactory().
  • Базовый URL. Требования к проекту меняются нередко, поэтому в какой-то момент вам может потребоваться переключить свой проект на другой URL-адрес. Если ваш базовый URL-адрес определен в одном месте, вы можете изменить его, не затрагивая все конечные точки приложения. Обычно вы определяете свой базовый URL при создании экземпляра Retrofit, что мы и делаем здесь.

Наконец, мы получаем пригодный для использования объект Retrofit, вызывая .build ().

Мы собираемся реализовать эту функцию в повторно используемом классе, поскольку это позволяет нам создать объект Retrofit один раз, а затем повторно использовать его во всем нашем приложении.

Создайте новый класс Java («Файл> Новый> Класс Java») с именем «RetrofitClient», а затем добавьте следующее:

package

Хотя мы используем только один преобразователь в нашем проекте, вы можете использовать несколько преобразователей в одном экземпляре Retrofit, например:

Если вы применяете несколько конвертеров, ваше приложение всегда будет использовать первый совместимый конвертер, переданный в Retrofit, которым в приведенном выше примере является Gson. Предполагая, что приведенный выше код извлекает данные, которые могут обрабатываться Gson или Moshi, он всегда будет использовать конвертер Gson.

Выполнение сетевого запроса

Теперь все на месте, мы готовы выполнить наш сетевой вызов.

Вы можете выполнять запросы на модернизацию синхронно с помощью call.execute () или асинхронно с помощью call.enqueue. Синхронные запросы выполняются в основном потоке и рискуют заблокировать основной поток пользовательского интерфейса во всех версиях Android. Кроме того, если вы попытаетесь выполнить запрос на модернизацию синхронно на Android 4.0 или выше, ваше приложение выйдет из строя с ошибкой NetworkOnMainThreadException. Итак, мы будем использовать метод enqueue () для асинхронной отправки нашего запроса.

Retrofit загрузит и проанализирует данные API в фоновом потоке, а затем вернет ответ в потоке пользовательского интерфейса. Мы обработаем этот ответ с помощью методов обратного вызова onResponse () и onFailure (), где мы определим, как наше приложение должно реагировать после завершения запроса.

Откройте класс MainActivity и добавьте следующее:

package

Отображение данных API

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

Откройте файл activity_main.xml своего проекта и добавьте виджет RecylcerView.

<?xml version="1.0" encoding="utf-8"?>

Нам также необходимо определить макет каждой строки в нашем RecyclerView:

  • Удерживая нажатой клавишу Control, щелкните папку «res / layout» вашего проекта.
  • Выберите «Создать> Файл ресурсов макета».
  • Дайте этому файлу имя «row_layout» и нажмите «ОК».
  • Откройте этот файл и добавьте следующее:
<?xml version="1.0" encoding="utf-8"?>

Связывание данных с помощью адаптеров Android

RecyclerView состоит из нескольких компонентов:

  • Виджет RecyclerView, который мы уже добавили в наш макет.
  • Диспетчер компоновки, например LinearLayoutManager или GridLayoutManager.
  • Объекты-держатели представления, которые являются экземплярами класса, расширяющего RecyclerView.ViewHolder. Каждый держатель представления отображает один элемент.
  • Адаптер, который создает объекты-держатели представлений по мере необходимости и привязывает держателей представлений к их данным, вызывая метод onBindViewHolder ().

Чтобы связать наши данные, создайте новый класс Java с именем «MyAdapter», а затем добавьте следующее:

import

Выполнение сетевого вызова: тестирование нашего приложения Retrofit

Настало время протестировать наше приложение! Убедитесь, что у вас есть активное подключение к Интернету, а затем установите приложение на физический смартфон или планшет Android или виртуальное устройство Android (AVD).

Как только вы запустите приложение, Retrofit загрузит и проанализирует данные API, а затем отобразит их в RecylcerView.

Использование API: начало работы с дооснащением на Android

Вы можете скачать этот завершенный проект с GitHub.

Использование дооснащения с RxJava 2

Также возможно использовать Retrofit в сочетании с другими библиотеками, включая RxJava.

Чтобы создать методы интерфейса API, которые возвращают типы RxJava, вам необходимо добавить адаптер RxJava в качестве зависимости проекта:

dependencies {
...
...
...
  implementation 

Затем вам нужно будет добавить RxJava2CallAdapterFactory в качестве адаптера вызова при создании экземпляра Retrofit:

После применения этого адаптера вы можете возвращать типы RxJava, такие как Observables и Flowables. Например:

@GET

Если вы хотите узнать больше о RxJava, ознакомьтесь с нашей статьей «Начало разработки приложений для Android с помощью RxJava 2.0».

Подведение итогов

В этом руководстве мы рассмотрели, как вы можете запрашивать информацию с удаленного сервера, обрабатывать ответ и отображать эту информацию в своем приложении с помощью популярного HTTP-клиента Retrofit. Мы также коснулись того, как использовать Retrofit в сочетании с другими библиотеками, включая RxJava, с помощью адаптеров.

Планируете ли вы использовать Retrofit в своих будущих проектах? Или у вас есть рекомендации по API, которые вы регулярно используете в своих проектах Android?

Связанный

Источник записи: https://www.androidauthority.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее