Junior
Co je Retrofit a jak se používá v vývoji Android?
sobes.tech AI
Odpověď od AI
Retrofit je typově bezpečný klient pro HTTP požadavky pro Android a Java. Zjednodušuje komunikaci s REST API pomocí anotací pro popis požadavků.
Hlavní výhody:
- Typová bezpečnost: Požadavky a odpovědi jsou reprezentovány jako Java (nebo Kotlin) objekty, což snižuje počet chyb za běhu.
- Jednoduché použití: Deklarace HTTP metod pomocí anotací činí kód čitelnějším a udržovatelnějším.
- Konfigurovatelnost: Snadné přidání interceptors pro logování, autentizaci a další úkoly.
- Integrace s konvertory: Podporuje různé konvertory pro parsování odpovědí (JSON, XML atd.), například Gson, Jackson.
Použití:
-
Přidání závislostí:
// build.gradle (úroveň aplikace) dependencies { implementation 'com.squareup.retrofit2:retrofit:<latest_version>' // Vyberte konvertor pro vaše data (například Gson) implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' } -
Definice API rozhraní: Vytvoří se Java/Kotlin rozhraní, které deklaruje všechny Endpointy API pomocí anotací.
// 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žadavek na URL "users/{userId}" Call<User> getUser(@Path("userId") int userId); // @Path pro vložení hodnoty do URL @GET("posts") // GET požadavek na URL "posts" Call<List<Post>> getPosts(); } // User.java (příklad POJO pro odpověď) public class User { private int id; private String name; // gettery a settery } // Post.java (příklad POJO pro odpověď) public class Post { private int id; private int userId; private String title; private String body; // gettery a settery } -
Vytvoření instance 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 API private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) // Nastavení základní URL .addConverterFactory(GsonConverterFactory.create()) // Přidání konvertoru .build(); } return retrofit; } public static ApiService getApiService() { return getRetrofitInstance().create(ApiService.class); // Vytvoření instance API služby } } -
Vykonání požadavků:
// V Activity, Fragment nebo ViewModel import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; // ... ApiService apiService = RetrofitClient.getApiService(); // Asynchronní požadavek na získání uživatele podle ID Call<User> userCall = apiService.getUser(1); userCall.enqueue(new Callback<User>() { // enqueue pro asynchronní provedení @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { User user = response.body(); // Zpracování získaného uživatele } else { // Zpracování chyby (např. response.code(), response.errorbody()) } } @Override public void onFailure(Call<User> call, Throwable t) { // Zpracování chyby sítě nebo jiné výjimky t.printStackTrace(); } }); // Asynchronní požadavek na získání seznamu příspěvků 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(); // Zpracování seznamu příspěvků } else { // Zpracování chyby } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // Zpracování chyby t.printStackTrace(); } });
Retrofit abstrahuje nízkoúrovňové detaily práce s HTTP, umožňuje soustředit se na logiku aplikace.