HTML Diff
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&lt;List&lt;Post&gt;&gt; // Отправить новый пост (POST) @POST("posts") fun createPost(@Body post: Post): Call&lt;Post&gt; // Полностью обновить пост (PUT) @PUT("posts/{id}") fun updatePost(@Path("id") id: Int, @Body post: Post): Call&lt;Post&gt; // Частично обновить пост (PATCH) @PATCH("posts/{id}") fun patchPost(@Path("id") id: Int, @Body post: Map&lt;String, Any&gt;): Call&lt;Post&gt; // Удалить пост (DELETE) @DELETE("posts/{id}") fun deletePost(@Path("id") id: Int): Call&lt;Void&gt; }<p>В начале этого кода мы импортируем два интерфейса. Вот для чего они нужны:</p>
41 import retrofit2.Call import retrofit2.http.* // Описываем, какие запросы мы хотим отправлять interface ApiService { // Получить все посты (GET) @GET("posts") fun getPosts(): Call&lt;List&lt;Post&gt;&gt; // Отправить новый пост (POST) @POST("posts") fun createPost(@Body post: Post): Call&lt;Post&gt; // Полностью обновить пост (PUT) @PUT("posts/{id}") fun updatePost(@Path("id") id: Int, @Body post: Post): Call&lt;Post&gt; // Частично обновить пост (PATCH) @PATCH("posts/{id}") fun patchPost(@Path("id") id: Int, @Body post: Map&lt;String, Any&gt;): Call&lt;Post&gt; // Удалить пост (DELETE) @DELETE("posts/{id}") fun deletePost(@Path("id") id: Int): Call&lt;Void&gt; }<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 &lt;uses-permission android:name="android.permission.INTERNET" /&gt;<em>Скриншот: Android Studio / Skillbox Media</em><p>Слева вверху нажмите на кнопку меню (три полоски) и в пункте<strong>File</strong>выберите<strong>Save</strong> <strong>All</strong>.</p>
55 &lt;uses-permission android:name="android.permission.INTERNET" /&gt;<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>