Junior
Šta je Retrofit i kako se koristi u razvoju Androida?
sobes.tech АИ
Одговор од АИ
Retrofit — то је тип-сигуран клијент за HTTP захтеве за Android и Java. Он поједностављује интеракцију са REST API-јем користећи анотације за описивање захтева.
Главне предности:
- Типска безбедност: Захтеви и одговори су представљени као Java (или Kotlin) објекти, што смањује број грешака у току извршавања.
- Лакоћа коришћења: Објављивање HTTP метода помоћу анотација чини код читљивијим и одрживијим.
- Конфигурабилност: Лако додавање interceptors за логовање, аутентификацију и друге задатке.
- Интеграција са конвертерима: Подржава различите конвертере за парсирање одговора (JSON, XML итд.) из кутије (на пример Gson, Jackson).
Користи се:
-
Додавање зависности:
// build.gradle (на нивоу апликације) dependencies { implementation 'com.squareup.retrofit2:retrofit:<latest_version>' // Изаберите конвертер за ваше податке (овде пример за Gson) implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' } -
Дефинисање API интерфејса: Ствара се Java/Kotlin интерфејс који објављује све Endpoint-е API-ја помоћу анотација.
// ApiService.java import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; import java.util.List; public interface ApiService { @GET("users/{userId}") // GET захтев на URL "users/{userId}" Call<User> getUser(@Path("userId") int userId); // @Path за постављање вредности у URL @GET("posts") // GET захтев на URL "posts" Call<List<Post>> getPosts(); } // User.java (пример POJO за одговор) public class User { private int id; private String name; // getters и setters } // Post.java (пример POJO за одговор) public class Post { private int id; private int userId; private String title; private String body; // getters и setters } -
Креирање Retrofit инстанце:
// RetrofitClient.java import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static final String BASE_URL = "https://api.example.com/"; // Основни URL вашег API private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) // Подешавање основног URL .addConverterFactory(GsonConverterFactory.create()) // Додавање конвертера .build(); } return retrofit; } public static ApiService getApiService() { return getRetrofitInstance().create(ApiService.class); // Креирање API сервиса } } -
Извршавање захтева:
// У Activity, Fragment или ViewModel import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; // ... ApiService apiService = RetrofitClient.getApiService(); // Асинхронај захтев за добијање корисника по ID-ју Call<User> userCall = apiService.getUser(1); userCall.enqueue(new Callback<User>() { // enqueue за асинхроно извршавање у другом току @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { User user = response.body(); // Обрада добијеног user-а } else { // Обрада грешке (нпр. response.code(), response.errorbody()) } } @Override public void onFailure(Call<User> call, Throwable t) { // Обрада грешке мреже или другог изузетка t.printStackTrace(); } }); // Асинхронај захтев за добијање листе постова Call<List<Post>> postsCall = apiService.getPosts(); postsCall.enqueue(new Callback<List<Post>>() { @Override public void onResponse(Call<List<Post>> call, Response<List<Post>> response) { if (response.isSuccessful() && response.body() != null) { List<Post> posts = response.body(); // Обрада листе постова } else { // Обрада грешке } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // Обрада грешке t.printStackTrace(); } });
Retrofit абстрахује нискоуровњске детаље рада са HTTP, омогућавајући да се фокусираш на логику апликације.