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

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

Sobes Copilot

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

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

sobes.tech AI

  1. Добавить зависимость: В build.gradle (app).

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:<latest_version>'
    implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' // или другой конвертер
    
  2. Создать интерфейс 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> - тип возвращаемого значения для асинхронного или синхронного запроса.
  3. Создать экземпляр Retrofit: Настроить базовый URL и добавить конвертер.

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .addConverterFactory(GsonConverterFactory.create()) // Используем Gson для парсинга JSON
        .build();
    
    ApiService apiService = retrofit.create(ApiService.class);
    
  4. Выполнить запрос: Асинхронно или синхронно.

    Асинхронно (рекомендуется для 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) {
        // Обработка ошибки
    }
    
  5. Обработать ответ: В методах onResponse или после успешного execute. Проверить статус ответа (response.isSuccessful()) и извлечь данные (response.body()). Обработать ошибки в onFailure или в блоке catch при синхронном запросе.

Retrofit также поддерживает интеграцию с корутинами (с помощью retrofit2:retrofit2-kotlin-coroutines-adapter), RxJava (с помощью retrofit2:adapter-rxjava), и другими библиотеками для асинхронного программирования.