Как да изпълняваме мрежови заявки с помощта на библиотеката Retrofit?
sobes.tech AI
Отговор от 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) и други библиотеки за асинхронно програмиране.