Назад к вопросам
Middle
81
questionbank

Как осуществлять сетевые запросы с использованием Retrofit?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Добавление зависимостей: В build.gradle модуля нужно добавить Retrofit и конвертер (например, Gson).

    dependencies {
        implementation 'com.squareup.retrofit2:retrofit:2.11.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
    }
    
  2. Создание интерфейса API: Определить интерфейс с аннотациями Retrofit, описывающими HTTP-методы, пути и параметры запросов.

    public interface ApiService {
    
        @GET("users/{id}")
        Call<User> getUser(@Path("id") int userId);
    
        @POST("users")
        Call<User> createUser(@Body User user);
    }
    
  3. Создание экземпляра Retrofit: Инициализировать Retrofit с базовым URL и конвертером.

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/") // Базовый URL
        .addConverterFactory(GsonConverterFactory.create()) // Использование Gson конвертера
        .build();
    
  4. Создание экземпляра сервиса API: Получить экземпляр интерфейса API из созданного Retrofit.

    ApiService apiService = retrofit.create(ApiService.class);
    
  5. Выполнение запроса: Вызвать метод интерфейса для выполнения запроса. Есть два основных способа:

    • Синхронный: (Лучше избегать в основном потоке UI)

      try {
          Response<User> response = apiService.getUser(123).execute();
          if (response.isSuccessful()) {
              User user = response.body();
              // Обработка данных
          } else {
              // Обработка ошибок
          }
      } catch (IOException e) {
           // Обработка ошибок сети
      }
      
    • Асинхронный: (Рекомендуется для UI потока)

      apiService.getUser(123).enqueue(new Callback<User>() {
          @Override
          public void onResponse(Call<User> call, Response<User> response) {
              if (response.isSuccessful()) {
                  User user = response.body();
                  // Обработка данных в главном потоке
              } else {
                  // Обработка ошибок
              }
          }
      
          @Override
          public void onFailure(Call<User> call, Throwable t) {
              // Обработка ошибок сети
          }
      });
      
  6. Модели данных: Создать классы моделей данных (POJO) для автоматического преобразования JSON в объекты Java с помощью конвертера (например, Gson).

    public class User {
        private int id;
        private String name;
        // getters and setters
    }
    
  7. Разрешение на доступ к сети: Не забыть добавить разрешение в AndroidManifest.xml.

    <uses-permission android:name="android.permission.INTERNET"/>