Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 2(46)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2

Библиографическое описание:
Пожидаев Ю.К., Семенов В.С., Салос В.С. ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ RETROFIT 2 ДЛЯ СЕТЕВОГО ВЗАИМОДЕЙСТВИЯ ПРИЛОЖЕНИЙ НА ОС ANDROID // Студенческий: электрон. научн. журн. 2019. № 2(46). URL: https://sibac.info/journal/student/46/129366 (дата обращения: 25.12.2024).

ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ RETROFIT 2 ДЛЯ СЕТЕВОГО ВЗАИМОДЕЙСТВИЯ ПРИЛОЖЕНИЙ НА ОС ANDROID

Пожидаев Юрий Константинович

студент, кафедра АСУ ФСУ, ТУСУР,

РФ, г. Томск

Семенов Виктор Сергеевич

студент, кафедра АОИ ФСУ, ТУСУР,

РФ, г. Томск

Салос Вадим Сергеевич

студент, кафедра АСУ ФСУ, ТУСУР,

РФ, г. Томск

В наше время у многих сайтов имеются собственные API для предоставления доступа к своим данным. Самые распространённые варианты на сегодняшний день - это JSON и XML.

Библиотека Retrofit упрощает взаимодействие с REST API сайта, беря на себя часть рутинной работы.

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

Подключается стандартно в Gradle.

implementation 'com.squareup.retrofit2:retrofit:2.3.0'

Библиотека работает с данными JSON и XML, используя конвертеры, которые следует указывать в Gradle.

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

Для работы с Retrofit понадобятся три класса.POJO (Plain Old Java Object) или Model Class - json-ответ от сервера нужно реализовать как модель.

  1. Retrofit - класс для обработки результатов. Ему нужно указать базовый адрес в методе baseUrl().
  2. Interface - интерфейс для управления адресом, используя команды GET, POST и т.д.

Работу с Retrofit можно разбить на отдельные задачи.

Задача первая. POJO

Проанализировать JSON (или другой формат) ответ от сайта и на его основе реализовать класс POJO.

POJO удобно создавать с помощью специальных веб-сервисов, преобразуя данные JSON или XML в готовый класс.

Задача вторая. Интерфейс

Реализовать интерфейс и указать имя метода.

В интерфейсе задаются запросы для отправки на сервер. Команда комбинируется с адресом сайта и получается полный путь к необходимому ресурсу.

Запросы размещаются в классе Call с необходимым типом данных.

import retrofit2.Call;

 

public interface APIServ {

    @POST("list")

    Call<Repo> loadRep();

}

С помощью аннотаций указываются веб-команды, а затем метод. В аннотации используются два метода, один для сервера, второй - это ваш собственный метод.

@GET("get_all_cats")  // команда сервера

List<Cat> getAllCat();  // ваш метод

Аннотация @Query используется для запросов с дополнительными параметрами. Допустим, у запроса есть дополнительный параметр, который выводит отсортированный список элементов: http://example.com/api/v1/products/cats?sort=desc.

@GET("products/cats?category=5&sort=desc")

Call<Cats> getAllCat();

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

@GET("products/cats?sort=desc")

Call<Cats> getAllCat(@Query("category") int categoryId);

Мы оставили ортировку как есть, а категорию перенесли в параметры метода под именем categoryId, добавив аннотацию, с которой параметр будет обращаться на сервер в составе запроса.

Call<Cats> getAllCat() = catAPIServ.getAllCat(5);

В результате, получится запрос: http://example.com/api/v1/products/cats?sort=desc&category=5.

Задача третья. Retrofit

Для синхронного запроса используйте метод Call.execute(), для асинхронного - метод Call.enqueue().

Объект для запроса к серверу создаётся в простейшем случае следующим образом:

public static final String BASE_URL = "http://api.example.com/";

Retrofit retrofit = new Retrofit.Builder()

        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

В итоге мы получили объект Retrofit, содержащий базовый URL и способность преобразовывать JSON-данные с помощью указанного конвертера Gson.

Далее в его методе create() указываем наш класс интерфейса с запросами к сайту.

UserService userService = retrofit.create(UserService.class);

После этого мы получаем объект Call и вызываем метод enqueue() (для асинхронного вызова) и создаём для него Callback. Запрос будет выполнен в отдельном потоке, а результат придет в Callback в main-потоке.

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

Основная часть работы происходит в onResponse(), ошибки выводятся в onFailure().

Метод onResponse() вызывается всегда, даже если запрос был неуспешным. Класс Response имеет удобный метод isSuccessful() для обработки успешных запросов.

Можно написать такую конструкцию.

// код 200

if (response.isSuccessful()) {

    ... // код для успешного случая

} else {

     

     switch(response.code()) {

                 case 404:

                     // страница не найдена. можно использовать ResponseBody, см. ниже

                             break;

                 case 500:

            // ошибка на сервере. можно использовать ResponseBody, см. ниже

            break;

     }

     

     // или

     // Также можете использовать ResponseBody для получения текста ошибки

    ResponseBody errorBody = response.errorBody();

    try {

        mTextView.setText(errorBody.string());

    } catch (IOException e) {

        e.printStackTrace();

    }

}

Чтобы отменить запрос, используйте метод Call.cancel().

 

Список литературы:

  1. Retrofit: A type-safe HTTP client for Android and Java [Электронный курс]. – Режим доступа: http://square.github.io/retrofit/ (дата обращения: 27.11.2018).
  2. Хабр: Изучаем Retrofit 2 [Электронный курс]. – Режим доступа: https://habr.com/post/314028/ (дата обращения: 27.11.2018).
  3. Baeldung: Introduction to Retrofit [Электронный курс]. – Режим доступа: https://www.baeldung.com/retrofit/ (дата обращения: 27.11.2018).

Оставить комментарий