0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>23 июл 2025</li>
2
<ul><li>23 июл 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Ускоряем работу Android-приложений с сервером.</p>
4
</ul><p>Ускоряем работу Android-приложений с сервером.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
7
<p>Максим Сафронов</p>
7
<p>Максим Сафронов</p>
8
<p>Шеф-редактор Skillbox Media "Код". Пишет о разработке, софт-скиллах и культовых личностях в IT. Обожает Swift, продукты Apple и мемы про код.</p>
8
<p>Шеф-редактор Skillbox Media "Код". Пишет о разработке, софт-скиллах и культовых личностях в IT. Обожает Swift, продукты Apple и мемы про код.</p>
9
<p>Современные Android-приложения постоянно обмениваются данными с сервером: показывают новости, списки пользователей, комментарии и многое другое. Чтобы запросить или отправить данные, приложения посылают серверу сообщения - HTTP-запросы. Для реализации этих функций при создании приложения можно использовать стандартные средства, предусмотренные Android Studio. Но есть это часто неудобно и требует много лишнего кода.</p>
9
<p>Современные Android-приложения постоянно обмениваются данными с сервером: показывают новости, списки пользователей, комментарии и многое другое. Чтобы запросить или отправить данные, приложения посылают серверу сообщения - HTTP-запросы. Для реализации этих функций при создании приложения можно использовать стандартные средства, предусмотренные Android Studio. Но есть это часто неудобно и требует много лишнего кода.</p>
10
<p>Здесь на сцену выходит Retrofit - библиотека, которая сильно упрощает работу с подобными задачами. Она позволяет буквально в несколько строк создавать модули, которые умеют отправлять запросы на сервер и получать от него ответы. Давайте разберёмся, как это сделать.</p>
10
<p>Здесь на сцену выходит Retrofit - библиотека, которая сильно упрощает работу с подобными задачами. Она позволяет буквально в несколько строк создавать модули, которые умеют отправлять запросы на сервер и получать от него ответы. Давайте разберёмся, как это сделать.</p>
11
<p>В этой статье мы:</p>
11
<p>В этой статье мы:</p>
12
<ul><li><a>создадим проект и подключим Retrofit</a>;</li>
12
<ul><li><a>создадим проект и подключим Retrofit</a>;</li>
13
<li><a>спроектируем модель данных</a>;</li>
13
<li><a>спроектируем модель данных</a>;</li>
14
<li><a>создадим интерфейс общения с API</a>;</li>
14
<li><a>создадим интерфейс общения с API</a>;</li>
15
<li><a>инициализируем Retrofit</a>;</li>
15
<li><a>инициализируем Retrofit</a>;</li>
16
<li><a>отредактируем MainActivity и протестируем приложение</a>.</li>
16
<li><a>отредактируем MainActivity и протестируем приложение</a>.</li>
17
</ul><p>В качестве сервера для теста мы будем использовать<a>JSONPlaceholder</a> - это бесплатный онлайн-сервис, который предоставляет тестовые данные через REST API. Он создан специально для того, чтобы разработчики могли тренироваться и отлаживать приложения без необходимости создавать собственный сервер или базу данных.</p>
17
</ul><p>В качестве сервера для теста мы будем использовать<a>JSONPlaceholder</a> - это бесплатный онлайн-сервис, который предоставляет тестовые данные через REST API. Он создан специально для того, чтобы разработчики могли тренироваться и отлаживать приложения без необходимости создавать собственный сервер или базу данных.</p>
18
<p>Также в качестве языка программирования мы используем Kotlin, который официально поддерживается Google и рекомендован для разработки Android-приложений. При этом Retrofit поддерживает и Java.</p>
18
<p>Также в качестве языка программирования мы используем Kotlin, который официально поддерживается Google и рекомендован для разработки Android-приложений. При этом Retrofit поддерживает и Java.</p>
19
<p>Запустите<a>Android Studio</a>и в главном окне нажмите на кнопку<strong>New Project</strong>. Если вы не знаете, что такое Android Studio и не работали с ней раньше, то сперва прочитайте<a>эту статью</a>. В ней - простое и понятное руководство для новичков.</p>
19
<p>Запустите<a>Android Studio</a>и в главном окне нажмите на кнопку<strong>New Project</strong>. Если вы не знаете, что такое Android Studio и не работали с ней раньше, то сперва прочитайте<a>эту статью</a>. В ней - простое и понятное руководство для новичков.</p>
20
<em>Скриншот: Android Studio / Skillbox Media</em><p>После запуска на экране появится окно создания проекта. В нём выберите<strong>Phone and Tablet</strong>слева и шаблон<strong>Empty Activity</strong>. Затем нажмите<strong>Next</strong>.</p>
20
<em>Скриншот: Android Studio / Skillbox Media</em><p>После запуска на экране появится окно создания проекта. В нём выберите<strong>Phone and Tablet</strong>слева и шаблон<strong>Empty Activity</strong>. Затем нажмите<strong>Next</strong>.</p>
21
<em>Скриншот: Android Studio / Skillbox Media</em><p>Укажите имя проекта и в качестве языка программирования (<strong>Build configuration language</strong>) выберите Kotlin. Затем нажмите<strong>Finish</strong>.</p>
21
<em>Скриншот: Android Studio / Skillbox Media</em><p>Укажите имя проекта и в качестве языка программирования (<strong>Build configuration language</strong>) выберите Kotlin. Затем нажмите<strong>Finish</strong>.</p>
22
<em>Скриншот: Android Studio / Skillbox Media</em><p>В Android для подключения библиотек используют систему Gradle, которая автоматически скачивает и устанавливает нужные библиотеки к вашему проекту. Вам не нужно ничего искать вручную - просто добавьте нужные строки в файл build.gradle.kts вашего модуля (обычно это app/build.gradle.kts).</p>
22
<em>Скриншот: Android Studio / Skillbox Media</em><p>В Android для подключения библиотек используют систему Gradle, которая автоматически скачивает и устанавливает нужные библиотеки к вашему проекту. Вам не нужно ничего искать вручную - просто добавьте нужные строки в файл build.gradle.kts вашего модуля (обычно это app/build.gradle.kts).</p>
23
<p>Перед началом установки Retrofit убедитесь, что у вас выбран режим отображения структуры Project. Так вы сможете видеть все файлы проекта.</p>
23
<p>Перед началом установки Retrofit убедитесь, что у вас выбран режим отображения структуры Project. Так вы сможете видеть все файлы проекта.</p>
24
<em>Скриншот: Android Studio / Skillbox Media</em><p>В директории проекта найдите файл build.gradle.kts, щёлкните по нему два раза левой кнопкой мыши, чтобы открыть. Найдите в нём раздел dependencies и добавьте туда следующий код:</p>
24
<em>Скриншот: Android Studio / Skillbox Media</em><p>В директории проекта найдите файл build.gradle.kts, щёлкните по нему два раза левой кнопкой мыши, чтобы открыть. Найдите в нём раздел dependencies и добавьте туда следующий код:</p>
25
implementation ("com.squareup.retrofit2:retrofit:2.9.0") // Подключаем саму библиотеку Retrofit implementation ("com.squareup.retrofit2:converter-gson:2.9.0") // Подключаем конвертер для работы с JSON<p>Обязательно нажмите на кнопку<strong>Sync Now</strong>справа вверху, чтобы Android Studio приступил к установке Retrofit. Должно получиться вот так:</p>
25
implementation ("com.squareup.retrofit2:retrofit:2.9.0") // Подключаем саму библиотеку Retrofit implementation ("com.squareup.retrofit2:converter-gson:2.9.0") // Подключаем конвертер для работы с JSON<p>Обязательно нажмите на кнопку<strong>Sync Now</strong>справа вверху, чтобы Android Studio приступил к установке Retrofit. Должно получиться вот так:</p>
26
<em>Скриншот: Android Studio / Skillbox Media</em><p>Модель данных, или data class, нужна для того, чтобы Retrofit автоматически преобразовывал ответ от сервера, который приходит в формате JSON, в объекты Kotlin. Без неё Retrofit не будет знать, как правильно интерпретировать полученные данные и во что их превращать. Всё это вам придётся делать вручную, что усложнит код и увеличит вероятность появления ошибок.</p>
26
<em>Скриншот: Android Studio / Skillbox Media</em><p>Модель данных, или data class, нужна для того, чтобы Retrofit автоматически преобразовывал ответ от сервера, который приходит в формате JSON, в объекты Kotlin. Без неё Retrofit не будет знать, как правильно интерпретировать полученные данные и во что их превращать. Всё это вам придётся делать вручную, что усложнит код и увеличит вероятность появления ошибок.</p>
27
<p>Чтобы получить данные с сервера правильно, нужно, чтобы элементы из модели данных имели такие же названия, какие указаны в JSON-файле, приходящем с сервера. То есть, когда мы отправляем запрос на https://jsonplaceholder.typicode.com/posts/1, сервер возвращает JSON-объект, который выглядит вот так:</p>
27
<p>Чтобы получить данные с сервера правильно, нужно, чтобы элементы из модели данных имели такие же названия, какие указаны в JSON-файле, приходящем с сервера. То есть, когда мы отправляем запрос на https://jsonplaceholder.typicode.com/posts/1, сервер возвращает JSON-объект, который выглядит вот так:</p>
28
{ "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit..." }<p>В нём:</p>
28
{ "userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit..." }<p>В нём:</p>
29
<ul><li>userId - ID пользователя, который написал пост (число);</li>
29
<ul><li>userId - ID пользователя, который написал пост (число);</li>
30
<li>id - ID самого поста (число);</li>
30
<li>id - ID самого поста (число);</li>
31
<li>title - заголовок поста (строка);</li>
31
<li>title - заголовок поста (строка);</li>
32
<li>body - текст поста (строка).</li>
32
<li>body - текст поста (строка).</li>
33
</ul><p>Чтобы преобразовать эти данные в объект Kotlin правильно, создайте новый Kotlin-файл Post.kt в папке app/src/main/java/имя_пакета/ и вставьте в него следующий код:</p>
33
</ul><p>Чтобы преобразовать эти данные в объект Kotlin правильно, создайте новый Kotlin-файл Post.kt в папке app/src/main/java/имя_пакета/ и вставьте в него следующий код:</p>
34
data class Post( val userId: Int, val id: Int, val title: String, val body: String )<em>Скриншот: Android Studio / Skillbox Media</em><p>Это поможет соотнести названия полей из JSON-файла с типами данных переменных проекта. В результате Retrofit сможет без проблем интерпретировать информацию, полученную с сервера.</p>
34
data class Post( val userId: Int, val id: Int, val title: String, val body: String )<em>Скриншот: Android Studio / Skillbox Media</em><p>Это поможет соотнести названия полей из JSON-файла с типами данных переменных проекта. В результате Retrofit сможет без проблем интерпретировать информацию, полученную с сервера.</p>
35
<p><strong>Интерфейс API</strong> - это набор правил, которые объясняют приложению:</p>
35
<p><strong>Интерфейс API</strong> - это набор правил, которые объясняют приложению:</p>
36
<ul><li>какие запросы можно отправить на сервер. Например, получить список постов или создать новый пост;</li>
36
<ul><li>какие запросы можно отправить на сервер. Например, получить список постов или создать новый пост;</li>
37
<li>какие параметры нужны для каждого запроса - ID поста или текст сообщения;</li>
37
<li>какие параметры нужны для каждого запроса - ID поста или текст сообщения;</li>
38
<li>какой ответ вернёт сервер.</li>
38
<li>какой ответ вернёт сервер.</li>
39
</ul><p>С помощью интерфейса API мы описываем, какие действия может выполнять наше приложение через интернет. Это похоже на меню в ресторане. Заглядывая в него, вы заранее знаете, что можно заказать и что вы получите.</p>
39
</ul><p>С помощью интерфейса API мы описываем, какие действия может выполнять наше приложение через интернет. Это похоже на меню в ресторане. Заглядывая в него, вы заранее знаете, что можно заказать и что вы получите.</p>
40
<p>Для создания интерфейса API перейдите в каталог с файлом Post.kt и создайте в нём ещё один файл -<a>ApiService.kt</a>. Вставьте в него следующий код:</p>
40
<p>Для создания интерфейса API перейдите в каталог с файлом Post.kt и создайте в нём ещё один файл -<a>ApiService.kt</a>. Вставьте в него следующий код:</p>
41
import retrofit2.Call import retrofit2.http.* // Описываем, какие запросы мы хотим отправлять interface ApiService { // Получить все посты (GET) @GET("posts") fun getPosts(): Call<List<Post>> // Отправить новый пост (POST) @POST("posts") fun createPost(@Body post: Post): Call<Post> // Полностью обновить пост (PUT) @PUT("posts/{id}") fun updatePost(@Path("id") id: Int, @Body post: Post): Call<Post> // Частично обновить пост (PATCH) @PATCH("posts/{id}") fun patchPost(@Path("id") id: Int, @Body post: Map<String, Any>): Call<Post> // Удалить пост (DELETE) @DELETE("posts/{id}") fun deletePost(@Path("id") id: Int): Call<Void> }<p>В начале этого кода мы импортируем два интерфейса. Вот для чего они нужны:</p>
41
import retrofit2.Call import retrofit2.http.* // Описываем, какие запросы мы хотим отправлять interface ApiService { // Получить все посты (GET) @GET("posts") fun getPosts(): Call<List<Post>> // Отправить новый пост (POST) @POST("posts") fun createPost(@Body post: Post): Call<Post> // Полностью обновить пост (PUT) @PUT("posts/{id}") fun updatePost(@Path("id") id: Int, @Body post: Post): Call<Post> // Частично обновить пост (PATCH) @PATCH("posts/{id}") fun patchPost(@Path("id") id: Int, @Body post: Map<String, Any>): Call<Post> // Удалить пост (DELETE) @DELETE("posts/{id}") fun deletePost(@Path("id") id: Int): Call<Void> }<p>В начале этого кода мы импортируем два интерфейса. Вот для чего они нужны:</p>
42
<ul><li>import retrofit2.Call - подключает тип Call, который представляет собой отложенный HTTP-запрос. Это как бы обещание запроса, которое мы можем выполнить, когда захотим.</li>
42
<ul><li>import retrofit2.Call - подключает тип Call, который представляет собой отложенный HTTP-запрос. Это как бы обещание запроса, которое мы можем выполнить, когда захотим.</li>
43
<li>import retrofit2.http.* - подключает аннотации для описания HTTP-запросов (@GET, @POST, @PUT и другие).</li>
43
<li>import retrofit2.http.* - подключает аннотации для описания HTTP-запросов (@GET, @POST, @PUT и другие).</li>
44
</ul><em>Скриншот: Android Studio / Skillbox Media</em><p><strong>Инициализация Retrofit</strong> - это процесс настройки библиотеки. Этот шаг необходим для того, чтобы запросы GET, POST, PUT, DELETE и другие выполнялись корректно, а данные из ответа сервера преобразовывались в удобные для использования объекты Kotlin.</p>
44
</ul><em>Скриншот: Android Studio / Skillbox Media</em><p><strong>Инициализация Retrofit</strong> - это процесс настройки библиотеки. Этот шаг необходим для того, чтобы запросы GET, POST, PUT, DELETE и другие выполнялись корректно, а данные из ответа сервера преобразовывались в удобные для использования объекты Kotlin.</p>
45
<p>В момент инициализации вы:</p>
45
<p>В момент инициализации вы:</p>
46
<ul><li>Настраиваете базовый URL API, например https://jsonplaceholder.typicode.com/, чтобы приложение знало, на какой сервер отправлять запросы.</li>
46
<ul><li>Настраиваете базовый URL API, например https://jsonplaceholder.typicode.com/, чтобы приложение знало, на какой сервер отправлять запросы.</li>
47
<li>Добавляете JSON-конвертер, чтобы Retrofit автоматически преобразовывал JSON-ответы от сервера в объекты Kotlin.</li>
47
<li>Добавляете JSON-конвертер, чтобы Retrofit автоматически преобразовывал JSON-ответы от сервера в объекты Kotlin.</li>
48
<li>Создаёте объект Retrofit с URL и конвертером, который будет отвечать за выполнение всех запросов, а также за обработку и преобразование ответов.</li>
48
<li>Создаёте объект Retrofit с URL и конвертером, который будет отвечать за выполнение всех запросов, а также за обработку и преобразование ответов.</li>
49
</ul><p>Для инициализации создайте всё в той же папке файл RetrofitClient.kt со следующим содержимым:</p>
49
</ul><p>Для инициализации создайте всё в той же папке файл RetrofitClient.kt со следующим содержимым:</p>
50
import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory // Настроим Retrofit один раз на всё приложение object RetrofitClient { private val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") // Базовый адрес API .addConverterFactory(GsonConverterFactory.create()) // Автоконвертация JSON в Kotlin-объекты .build() val apiService: ApiService = retrofit.create(ApiService::class.java) }<p>В интерфейсе Android Studio должно получиться так:</p>
50
import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory // Настроим Retrofit один раз на всё приложение object RetrofitClient { private val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") // Базовый адрес API .addConverterFactory(GsonConverterFactory.create()) // Автоконвертация JSON в Kotlin-объекты .build() val apiService: ApiService = retrofit.create(ApiService::class.java) }<p>В интерфейсе Android Studio должно получиться так:</p>
51
<em>Скриншот: Android Studio / Skillbox Media</em><p>Чтобы приложение работало без ошибок, нужно отредактировать главный скрипт - MainActivity.kt. Для этого откройте его (он лежит в каталоге, в котором мы создавали файлы) и в самое начало добавьте импорты:</p>
51
<em>Скриншот: Android Studio / Skillbox Media</em><p>Чтобы приложение работало без ошибок, нужно отредактировать главный скрипт - MainActivity.kt. Для этого откройте его (он лежит в каталоге, в котором мы создавали файлы) и в самое начало добавьте импорты:</p>
52
import android.widget.LinearLayout // Используем LinearLayout для размещения дочерних элементов (например, TextView или Button) import android.widget.TextView // Используем TextView для отображения текста на экране import android.app.Activity // Используем Activity вместо AppCompatActivity import android.util.Log // Логирование сообщений для отладки import retrofit2.Call // Используем Call для выполнения запросов к серверу import retrofit2.Callback // Используем Callback для обработки асинхронных запросов import retrofit2.Response // Используем Response для обработки ответа от сервера import retrofit2.Retrofit // Используем Retrofit для работы с API import retrofit2.converter.gson.GsonConverterFactory // Используем GsonConverterFactory для преобразования JSON в объекты Kotlin<p>Весь код, расположенный ниже, стираем и взамен пишем следующее:</p>
52
import android.widget.LinearLayout // Используем LinearLayout для размещения дочерних элементов (например, TextView или Button) import android.widget.TextView // Используем TextView для отображения текста на экране import android.app.Activity // Используем Activity вместо AppCompatActivity import android.util.Log // Логирование сообщений для отладки import retrofit2.Call // Используем Call для выполнения запросов к серверу import retrofit2.Callback // Используем Callback для обработки асинхронных запросов import retrofit2.Response // Используем Response для обработки ответа от сервера import retrofit2.Retrofit // Используем Retrofit для работы с API import retrofit2.converter.gson.GsonConverterFactory // Используем GsonConverterFactory для преобразования JSON в объекты Kotlin<p>Весь код, расположенный ниже, стираем и взамен пишем следующее:</p>
53
class MainActivity : Activity() { // Наследуем от Activity, это основной класс для взаимодействия с пользовательским интерфейсом в Android override fun onCreate(savedInstanceState: Bundle?) { // Метод, который вызывается при создании Activity super.onCreate(savedInstanceState) // Вызов родительского метода для того, чтобы инициализировать Activity // Создаём линейный макет, который будет содержать дочерние элементы val layout = LinearLayout(this) // Инициализация LinearLayout, передаём контекст layout.orientation = LinearLayout.VERTICAL // Устанавливаем вертикальное расположение элементов в макете // Создаём TextView, чтобы отобразить текст на экране val textView = TextView(this) // Инициализация TextView с контекстом текущей Activity textView.text = "Hello, Retrofit!" // Устанавливаем текст, который будет отображаться в TextView layout.addView(textView) // Добавляем созданный TextView в макет // Устанавливаем созданный layout как основной контент для Activity setContentView(layout) // Устанавливаем layout, чтобы он отображался в Activity // Запускаем асинхронный запрос, чтобы проверить работу Retrofit<p>В Android Studio это будет выглядеть так:</p>
53
class MainActivity : Activity() { // Наследуем от Activity, это основной класс для взаимодействия с пользовательским интерфейсом в Android override fun onCreate(savedInstanceState: Bundle?) { // Метод, который вызывается при создании Activity super.onCreate(savedInstanceState) // Вызов родительского метода для того, чтобы инициализировать Activity // Создаём линейный макет, который будет содержать дочерние элементы val layout = LinearLayout(this) // Инициализация LinearLayout, передаём контекст layout.orientation = LinearLayout.VERTICAL // Устанавливаем вертикальное расположение элементов в макете // Создаём TextView, чтобы отобразить текст на экране val textView = TextView(this) // Инициализация TextView с контекстом текущей Activity textView.text = "Hello, Retrofit!" // Устанавливаем текст, который будет отображаться в TextView layout.addView(textView) // Добавляем созданный TextView в макет // Устанавливаем созданный layout как основной контент для Activity setContentView(layout) // Устанавливаем layout, чтобы он отображался в Activity // Запускаем асинхронный запрос, чтобы проверить работу Retrofit<p>В Android Studio это будет выглядеть так:</p>
54
<em>Скриншот: Android Studio / Skillbox Media</em><p>Осталась мелочь, но очень важная. Чтобы всё заработало, приложению нужно разрешение на выход в интернет. Для этого откройте файл app/src/main/AndroidManifest.xml и в него, до блока application, добавьте строку.</p>
54
<em>Скриншот: Android Studio / Skillbox Media</em><p>Осталась мелочь, но очень важная. Чтобы всё заработало, приложению нужно разрешение на выход в интернет. Для этого откройте файл app/src/main/AndroidManifest.xml и в него, до блока application, добавьте строку.</p>
55
<uses-permission android:name="android.permission.INTERNET" /><em>Скриншот: Android Studio / Skillbox Media</em><p>Слева вверху нажмите на кнопку меню (три полоски) и в пункте<strong>File</strong>выберите<strong>Save</strong> <strong>All</strong>.</p>
55
<uses-permission android:name="android.permission.INTERNET" /><em>Скриншот: Android Studio / Skillbox Media</em><p>Слева вверху нажмите на кнопку меню (три полоски) и в пункте<strong>File</strong>выберите<strong>Save</strong> <strong>All</strong>.</p>
56
<em>Скриншот: Android Studio / Skillbox Media</em><p>Теперь нажмите на кнопку запуска приложения. Она находится справа вверху.</p>
56
<em>Скриншот: Android Studio / Skillbox Media</em><p>Теперь нажмите на кнопку запуска приложения. Она находится справа вверху.</p>
57
<em>Скриншот: Android Studio / Skillbox Media</em><p>Подождите, пока запустится виртуальная машина Android, в которой и откроется приложение, - экран эмулятора станет белым. Теперь слева внизу найдите кнопку<strong>Logcat</strong>, нажмите на неё, чтобы открыть консоль логов. В ней вы увидите результаты запросов от Retrofit, полученные с JSONPlaceholder.</p>
57
<em>Скриншот: Android Studio / Skillbox Media</em><p>Подождите, пока запустится виртуальная машина Android, в которой и откроется приложение, - экран эмулятора станет белым. Теперь слева внизу найдите кнопку<strong>Logcat</strong>, нажмите на неё, чтобы открыть консоль логов. В ней вы увидите результаты запросов от Retrofit, полученные с JSONPlaceholder.</p>
58
<em>Скриншот: Android Studio / Skillbox Media</em><p>В этой статье мы показали, как подключить библиотеку Retrofit к Android-приложению, чтобы упростить работу с HTTP-запросами. Пошагово разобрали, как настроить Retrofit, создать модели данных, описать интерфейсы API и настроить обработку запросов. В результате получили тестовое приложение, которое эффективно и без лишних усилий взаимодействует с сервером.</p>
58
<em>Скриншот: Android Studio / Skillbox Media</em><p>В этой статье мы показали, как подключить библиотеку Retrofit к Android-приложению, чтобы упростить работу с HTTP-запросами. Пошагово разобрали, как настроить Retrofit, создать модели данных, описать интерфейсы API и настроить обработку запросов. В результате получили тестовое приложение, которое эффективно и без лишних усилий взаимодействует с сервером.</p>
59
<p>Больше о работе с Retrofit можно узнать из <a>официальной документации</a>. В ней есть примеры сложных запросов, советы по использованию и руководства по отдельным модулям библиотеки.</p>
59
<p>Больше о работе с Retrofit можно узнать из <a>официальной документации</a>. В ней есть примеры сложных запросов, советы по использованию и руководства по отдельным модулям библиотеки.</p>
60
<a>Курс с трудоустройством: "Профессия Разработчик + ИИ" Узнать о курсе</a>
60
<a>Курс с трудоустройством: "Профессия Разработчик + ИИ" Узнать о курсе</a>