Как выполнять сетевые запросы с использованием библиотеки Retrofit?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
Добавить зависимость: В
build.gradle(app).// Retrofit implementation 'com.squareup.retrofit2:retrofit:<latest_version>' implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' // или другой конвертер -
Создать интерфейс API: Определить методы для каждого сетевого запроса.
interface ApiService { @GET("users/{id}") Call<User> getUser(@Path("id") int userId); @POST("users") Call<User> createUser(@Body User user); }@GET,@POST, и другие аннотации определяют тип HTTP-метода."users/{id}"- относительный путь к ресурсу.@Path,@Query,@Body- аннотации для параметров запроса.Call<T>- тип возвращаемого значения для асинхронного или синхронного запроса.
-
Создать экземпляр Retrofit: Настроить базовый URL и добавить конвертер.
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) // Используем Gson для парсинга JSON .build(); ApiService apiService = retrofit.create(ApiService.class); -
Выполнить запрос: Асинхронно или синхронно.
Асинхронно (рекомендуется для UI потока):
Call<User> call = apiService.getUser(123); call.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful()) { User user = response.body(); // Обработка успешного ответа } else { // Обработка ошибки ответа (например, 404, 500) } } @Override public void onFailure(Call<User> call, Throwable t) { // Обработка ошибки сети или исключения } });Синхронно (не использовать в UI потоке):
try { Response<User> response = apiService.getUser(123).execute(); if (response.isSuccessful()) { User user = response.body(); // Обработка успешного ответа } else { // Обработка ошибки ответа } } catch (IOException e) { // Обработка ошибки } -
Обработать ответ: В методах
onResponseили после успешногоexecute. Проверить статус ответа (response.isSuccessful()) и извлечь данные (response.body()). Обработать ошибки вonFailureили в блокеcatchпри синхронном запросе.
Retrofit также поддерживает интеграцию с корутинами (с помощью retrofit2:retrofit2-kotlin-coroutines-adapter), RxJava (с помощью retrofit2:adapter-rxjava), и другими библиотеками для асинхронного программирования.