Sobes.tech
Middle

Come eseguire richieste di rete utilizzando la libreria Retrofit?

sobes.tech AI

Risposta dell'AI

  1. Aggiungi dipendenza: Nel file build.gradle (app).

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:<latest_version>'
    implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' // o un altro convertitore
    
  2. Crea interfaccia API: Definisci metodi per ogni richiesta di rete.

    interface ApiService {
        @GET("users/{id}")
        Call<User> getUser(@Path("id") int userId);
    
        @POST("users")
        Call<User> createUser(@Body User user);
    }
    
    • @GET, @POST e altre annotazioni definiscono il tipo di metodo HTTP.
    • "users/{id}" - percorso relativo alla risorsa.
    • @Path, @Query, @Body - annotazioni per i parametri della richiesta.
    • Call<T> - tipo di ritorno per richieste asincrone o sincrone.
  3. Crea istanza di Retrofit: Configura URL di base e aggiungi un convertitore.

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .addConverterFactory(GsonConverterFactory.create()) // Usare Gson per il parsing JSON
        .build();
    
    ApiService apiService = retrofit.create(ApiService.class);
    
  4. Esegui richiesta: In modo asincrono o sincrono.

    Asincrono (consigliato per il thread 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();
                // Gestisci risposta di successo
            } else {
                // Gestisci errore di risposta (ad esempio, 404, 500)
            }
        }
    
        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // Gestisci errore di rete o eccezione
        }
    });
    

    Sincrono (non usare nel thread UI):

    try {
        Response<User> response = apiService.getUser(123).execute();
        if (response.isSuccessful()) {
            User user = response.body();
            // Gestisci risposta di successo
        } else {
            // Gestisci errore di risposta
        }
    } catch (IOException e) {
        // Gestisci errore
    }
    
  5. Gestisci risposta: Nei metodi onResponse o dopo execute di successo. Verifica lo stato della risposta (response.isSuccessful()) e estrai i dati (response.body()). Gestisci gli errori in onFailure o nel blocco catch per richiesta sincrona.

Retrofit supporta anche l'integrazione con le coroutine (con retrofit2:retrofit2-kotlin-coroutines-adapter), RxJava (con retrofit2:adapter-rxjava) e altre librerie per la programmazione asincrona.