Sobes.tech
Middle

Cum se realizează solicitări de rețea folosind biblioteca Retrofit?

sobes.tech AI

Răspuns de la AI

  1. Adaugă dependența: În build.gradle (app).

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:<latest_version>'
    implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' // sau alt convertor
    
  2. Creează interfața API: Definește metode pentru fiecare solicitare de rețea.

    interface ApiService {
        @GET("users/{id}")
        Call<User> getUser(@Path("id") int userId);
    
        @POST("users")
        Call<User> createUser(@Body User user);
    }
    
    • @GET, @POST și alte adnotări definesc tipul metodei HTTP.
    • "users/{id}" - calea relativă către resursă.
    • @Path, @Query, @Body - adnotări pentru parametrii solicitării.
    • Call<T> - tipul de returnare pentru solicitări asincrone sau sincrone.
  3. Creează instanța Retrofit: Configurează URL-ul de bază și adaugă un convertor.

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .addConverterFactory(GsonConverterFactory.create()) // Folosește Gson pentru parsing JSON
        .build();
    
    ApiService apiService = retrofit.create(ApiService.class);
    
  4. Execută solicitarea: Asincron sau sincronic.

    Asincron (recomandat pentru firul 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();
                // Procesează răspunsul de succes
            } else {
                // Procesează eroarea de răspuns (ex. 404, 500)
            }
        }
    
        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // Procesează eroarea de rețea sau excepția
        }
    });
    

    Sincronic (nu folosi în firul UI):

    try {
        Response<User> response = apiService.getUser(123).execute();
        if (response.isSuccessful()) {
            User user = response.body();
            // Procesează răspunsul de succes
        } else {
            // Procesează eroarea de răspuns
        }
    } catch (IOException e) {
        // Procesează eroarea
    }
    
  5. Procesează răspunsul: În metodele onResponse sau după execute de succes. Verifică starea răspunsului (response.isSuccessful()) și extrage datele (response.body()). Gestionează erorile în onFailure sau în blocul catch pentru solicitări sincrone.

Retrofit suportă, de asemenea, integrarea cu corutine (cu retrofit2:retrofit2-kotlin-coroutines-adapter), RxJava (cu retrofit2:adapter-rxjava) și alte biblioteci pentru programare asincronă.