Creare un client REST in Android con Retrofit
Di librerie HTTP per Android ce ne stanno diverse; ultimamente mi sono imbattuto in Retrofit, e devo dire che mi son trovato bene.
Noi vedremo un esempio in Java; non so se è disponibile anche per Kotlin.
Come servizio REST useremo questo: https://jsonplaceholder.typicode.com/users.
Questo sito crea servizi fake per fare test; cominciamo con l'installare la libreria.
Nel vostro file gradle aggiungete queste dipendenze:
dependencies {
.....................
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
}
La seconda ci serve per il parsing del JSON.
Questa la nostra classe POJO:
public class User {
public String id;
public String username;
public String email;
}
Prende solo una piccola parte dei dati del servizio REST:
Questa la nostra interfaccia, che contiente i vari metodi per l'interrogazione del servizio (nel mio caso solo uno):
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
public interface UserService {
@GET("users")
Call<List<User>> getUsers();
}
Molto importante è l'annotazione, nella quale indichiamo quale servizio prendere dall'url; infatti, come vedrete dopo, la libreria richiede un url base, al quale aggiungerà in automatico il servizio prendendolo dalla annotazione.
Infine la nostra Activity:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
UserService us = retrofit.create(UserService.class);
us.getUsers().enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
System.out.println("OK");
List<User> list = response.body();
for (User u : list) {
System.out.println(u.username);
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
System.out.println("KO");
}
});
}
}
Noi abbiamo usato i metodi asincroni.
Enjoy!
java android activity retrofit http rest gradle
Commentami!