Как осуществлять сетевые запросы с использованием Retrofit?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
Добавление зависимостей: В build.gradle модуля нужно добавить Retrofit и конвертер (например, Gson).
dependencies { implementation 'com.squareup.retrofit2:retrofit:2.11.0' implementation 'com.squareup.retrofit2:converter-gson:2.11.0' } -
Создание интерфейса API: Определить интерфейс с аннотациями Retrofit, описывающими HTTP-методы, пути и параметры запросов.
public interface ApiService { @GET("users/{id}") Call<User> getUser(@Path("id") int userId); @POST("users") Call<User> createUser(@Body User user); } -
Создание экземпляра Retrofit: Инициализировать Retrofit с базовым URL и конвертером.
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") // Базовый URL .addConverterFactory(GsonConverterFactory.create()) // Использование Gson конвертера .build(); -
Создание экземпляра сервиса API: Получить экземпляр интерфейса API из созданного Retrofit.
ApiService apiService = retrofit.create(ApiService.class); -
Выполнение запроса: Вызвать метод интерфейса для выполнения запроса. Есть два основных способа:
-
Синхронный: (Лучше избегать в основном потоке 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) { // Обработка ошибок сети } });
-
-
Модели данных: Создать классы моделей данных (POJO) для автоматического преобразования JSON в объекты Java с помощью конвертера (например, Gson).
public class User { private int id; private String name; // getters and setters } -
Разрешение на доступ к сети: Не забыть добавить разрешение в AndroidManifest.xml.
<uses-permission android:name="android.permission.INTERNET"/>