Sobes.tech
Junior

Mi az a Retrofit és hogyan használják az Android fejlesztésben?

sobes.tech MI

Válasz az MI-től

A Retrofit egy típusbiztos kliens az HTTP kérésekhez Android és Java számára. Egyszerűsíti a REST API-kkal való kommunikációt annotációk használatával a kérések leírására.

Fő előnyei:

  • Típusbiztonság: A kérések és válaszok Java (vagy Kotlin) objektumként vannak reprezentálva, csökkentve a futásidejű hibák számát.
  • Egyszerű használat: Az HTTP metódusok annotációkkal történő deklarálása olvashatóbbá és karbantarthatóbbá teszi a kódot.
  • Konfigurálhatóság: Könnyen hozzáadhatók interceptorsok naplózásra, hitelesítésre és más feladatokra.
  • Konverterekkel való integráció: Támogatja különböző konvertereket a válaszok elemzéséhez (JSON, XML stb.), például Gson, Jackson.

Használat:

  1. Függőségek hozzáadása:

    // build.gradle (alkalmazás szint)
    dependencies {
        implementation 'com.squareup.retrofit2:retrofit:<latest_version>'
        // Válasszon konvertert az adatokhoz (például Gson)
        implementation 'com.squareup.retrofit2:converter-gson:<latest_version>'
    }
    
  2. API interfész meghatározása: Java/Kotlin interfész, amely deklarálja az összes API végpontot annotációkkal.

    // ApiService.java
    import retrofit2.Call;
    import retrofit2.http.GET;
    import retrofit2.http.Path;
    import java.util.List;
    
    public interface ApiService {
    
        @GET("users/{userId}") // GET kérés a "users/{userId}" URL-re
        Call<User> getUser(@Path("userId") int userId); // @Path a érték URL-be való behelyettesítéséhez
    
        @GET("posts") // GET kérés a "posts" URL-re
        Call<List<Post>> getPosts();
    }
    
    // User.java (példa POJO a válaszhoz)
    public class User {
        private int id;
        private String name;
        // getterek és setterek
    }
    
    // Post.java (példa POJO a válaszhoz)
    public class Post {
        private int id;
        private int userId;
        private String title;
        private String body;
        // getterek és setterek
    }
    
  3. Retrofit példány létrehozása:

    // RetrofitClient.java
    import retrofit2.Retrofit;
    import retrofit2.converter.gson.GsonConverterFactory;
    
    public class RetrofitClient {
    
        private static final String BASE_URL = "https://api.example.com/"; // Az API alap URL-je
        private static Retrofit retrofit;
    
        public static Retrofit getRetrofitInstance() {
            if (retrofit == null) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL) // Alap URL beállítása
                        .addConverterFactory(GsonConverterFactory.create()) // Konverter hozzáadása
                        .build();
            }
            return retrofit;
        }
    
        public static ApiService getApiService() {
            return getRetrofitInstance().create(ApiService.class); // API szolgáltatás példányának létrehozása
        }
    }
    
  4. Kérések végrehajtása:

    // Activity, Fragment vagy ViewModel-ben
    import retrofit2.Call;
    import retrofit2.Callback;
    import retrofit2.Response;
    
    // ...
    
    ApiService apiService = RetrofitClient.getApiService();
    
    // Aszinkron kérés a felhasználó ID szerinti lekéréshez
    Call<User> userCall = apiService.getUser(1);
    userCall.enqueue(new Callback<User>() { // enqueue az aszinkron végrehajtáshoz
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            if (response.isSuccessful() && response.body() != null) {
                User user = response.body();
                // A kapott user feldolgozása
            } else {
                // Hiba kezelése (pl. response.code(), response.errorbody())
            }
        }
    
        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // Hálózati hiba vagy más kivétel kezelése
            t.printStackTrace();
        }
    });
    
    // Aszinkron kérés a posztok listájának lekéréséhez
    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();
                // Posztok feldolgozása
            } else {
                // Hiba kezelése
            }
        }
    
        @Override
        public void onFailure(Call<List<Post>> call, Throwable t) {
            // Hiba kezelése
            t.printStackTrace();
        }
    });
    

A Retrofit absztrahálja az alacsony szintű HTTP-műveletek részleteit, lehetővé téve, hogy a alkalmazás logikájára összpontosítson.