DevCorner620

DevCorner: Usiamo Retrofit per una migliore gestione delle risorse di rete [METEO]

Roberto Orgiu

Abbiamo visto, durante la scorsa lezione, come sia possibile effettuare una richiesta di rete mediante l’utilizzo di AsyncTask, ma abbiamo anche sottolineato come questi componenti da soli non siano esattamente il miglior modo per gestire il networking: proprio per questo motivo abbiamo deciso di usare RetroFit, una famosa libreria creata da Square ed utilizzata da diverse migliaia di applicazioni Android.

LEGGI ANCHE: [METEO] Lezione 1

Vediamo quindi come implementare questo framework partendo dalle fondamenta, ovvero dall’importazione tramite Gradle: apriamo il file app/build.gradle e, nella sezione dependencies, incolliamo questa riga, che ci permetterà di utilizzare Retrofit per gestire le richieste di rete

compile 'com.squareup.retrofit:retrofit:1.6.1'

una volta che le modifiche al file sono state apportate, Android Studio avrà bisogno di sincronizzare questi cambiamenti: possiamo farlo dalla voce Sync now in alto a destra nel banner giallo che ci dovrebbe apparire oppure dall’apposita icona nella barra degli strumenti, come evidenziato dall’immagine qui sotto.

Sync Gradle file

Colpiti dalla semplicità dell’implementazione di RetroFit (qui possiamo vedere l’esempio di GitHub), proviamo ad implementare anche noi la nostra richiesta di rete usando il framework: iniziamo quindi creando una classe interna ad un nuovo AsyncTask, che servirà per contenere i risultati della parte weather della risposta di Metwit.

static class Result {
String weather;
}

Poi, passiamo alla parte inerente RetroFit, creando un’interfaccia con annotazione GET in cui possiamo cambiare i parametri di latitudine e longitudine attraverso due Query

interface Metwit {
  @GET("/v2/weather/")
  List<Result> weather (
    @Query("location_lat") String latitude,
    @Query("location_lng") String longitude
  );
};

Quello che facciamo con questo snippet è creare un’interfaccia Metwit con una lista interna che accetta due parametri (latitudine e longitudine): quando invochiamo quindi Metwit.weather, ci verranno chiesti i due parametri, che andranno a comporre la parte rimanente dell’URL di richiamo delle API

?location_lat=latitude&location_lng=longitude

A questo punto, l’implementazione di RetroFit è completa, almeno per una prima parte. Ma non è tutto oro quel che luccica e vedremo che, alcune volte, RetroFit non riesce a gestire correttamente la risposta di Metwit e si possono verificare dei crash.
Non ci resta quindi che trovare il modo di mettere insieme i pezzi ma, almeno per questa settimana, ci accontentiamo di aver fatto la conoscenza di RetroFit, uno dei migliori framework Java per la gestione delle risorse di rete.

Come di consueto, potrete trovare tutte le risorse necessarie al completamento di questo episodio sul nostro forum. Buona programmazione a tutti!