Junior
Čo je Retrofit a ako sa používa vo vývoji Android?
sobes.tech AI
Odpoveď od AI
Retrofit je typovo bezpečný klient pre HTTP požiadavky pre Android a Java. Zjednodušuje interakciu s REST API pomocou anotácií na opis požiadaviek.
Hlavné výhody:
- Typová bezpečnosť: Požiadavky a odpovede sú reprezentované ako Java (alebo Kotlin) objekty, čo znižuje počet chýb počas behu.
- Jednoduchosť použitia: Vyhlásenie HTTP metód pomocou anotácií robí kód čitateľnejším a udržiavateľnejším.
- Konfigurovateľnosť: Jednoducho pridávať interceptory na logovanie, autentifikáciu a ďalšie úlohy.
- Integrácia s konvertérmi: Podporuje rôzne konvertéry na parsovanie odpovedí (JSON, XML atď.) priamo z krabice (napríklad Gson, Jackson).
Použitie:
-
Pridanie závislostí:
// build.gradle (na úrovni aplikácie) dependencies { implementation 'com.squareup.retrofit2:retrofit:<latest_version>' // Vyberte konvertér pre vaše dáta (tu príklad pre Gson) implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' } -
Definovanie API rozhrania: Vytvorí sa Java/Kotlin rozhranie, ktoré deklaruje všetky Endpointy API pomocou anotácií.
// ApiService.java import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; import java.util.List; public interface ApiService { @GET("users/{userId}") // GET požiadavka na URL "users/{userId}" Call<User> getUser(@Path("userId") int userId); // @Path na vloženie hodnoty do URL @GET("posts") // GET požiadavka na URL "posts" Call<List<Post>> getPosts(); } // User.java (príklad POJO pre odpoveď) public class User { private int id; private String name; // getters a setters } // Post.java (príklad POJO pre odpoveď) public class Post { private int id; private int userId; private String title; private String body; // getters a setters } -
Vytvorenie inštancie Retrofit:
// RetrofitClient.java import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static final String BASE_URL = "https://api.example.com/"; // Základná URL vašho API private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) // Nastavenie základného URL .addConverterFactory(GsonConverterFactory.create()) // Pridanie konvertéra .build(); } return retrofit; } public static ApiService getApiService() { return getRetrofitInstance().create(ApiService.class); // Vytvorenie inštancie API servisu } } -
Vykonanie požiadaviek:
// V Activity, Fragment alebo ViewModel import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; // ... ApiService apiService = RetrofitClient.getApiService(); // Asynchrónna požiadavka na získanie používateľa podľa ID Call<User> userCall = apiService.getUser(1); userCall.enqueue(new Callback<User>() { // enqueue na asynchrónne vykonanie v inom vlákne @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { User user = response.body(); // Spracovanie získaného usera } else { // Spracovanie chyby (napr. response.code(), response.errorbody()) } } @Override public void onFailure(Call<User> call, Throwable t) { // Spracovanie chyby siete alebo iného výnimky t.printStackTrace(); } }); // Asynchrónna požiadavka na získanie zoznamu príspevkov 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(); // Spracovanie zoznamu príspevkov } else { // Spracovanie chyby } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // Spracovanie chyby t.printStackTrace(); } });
Retrofit abstrakciu znižuje nízkoúrovňové detaily práce s HTTP, umožňujúc sústrediť sa na logiku aplikácie.