Accede a todo EDteam con un único pago¡Sube a premium!

¿Cómo consumir una API Rest desde android?

En este tutorial consumiremos una API en simples pasos desde una aplicación Android usando la librería retrofit.

Diseño web
6 minutos
Hace 6 años
¿Cómo consumir una API Rest desde android?

Una de las tareas más comunes en la vida de un desarrollador es consumir una API Rest, ya que estas nos dan varias ventajas como compartir información entre aplicaciones sin importar en que lenguaje esten desarrolladas, entre este tipo de aplicaciones estan las aplicaciones móviles, las cuales en el mundo actual son verdaderamente importantes.

Para este ejercicio vamos a consumir la API de JSONPlaceholder para poder conseguir datos desde la API, usando código android y para este fin utilizaremos la librería Retrofit.

Retrofit es una librería muy poderosa para la realización de peticiones usando los verbos HTTP y que se puede configurar utilizando anotaciones de Java.

Cómo primer paso debemos agregar la siguiente línea en el Gradle de nuestro proyecto para agregar retrofit:

1 implementation 'com.squareup.retrofit2:retrofit:2.4.0' 2

Además debemos agregar la librería converter-gson que nos permitirá serializar los datos que obtengamos para asi poder manipularlos, esta librería la agregamos con la siguiente línea en nuestro gradle:``

implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

En el momento que hayamos agregado estás líneas en nuestro Gradle, Android Studio sincronizara nuestros cambios y agregará la librería al proyecto, una vez terminado este proceso debemos permitir que nuestra aplicación acceda a internet y esto lo podemos hacer con la siguiente línea en nuestro archivo AndroidManifest.xml:

1<uses-permission android:name="android.permission.INTERNET" /> 2

Cabe destacar que esta etiqueta debe ser hija directa de la etiqueta manifest.

Como siguiente paso debemos crear el Pojo que va representar cada uno de los datos que vamos a estar recibiendo por medio de la API y como en este ejercicio vamos a estar consumiendo la siguiente URI POST, tendremos los siguientes datos:JSONPlaceholder

Como podemos ver esta URI nos devuelve un JSON con un Array donde cada una de sus posiciones es un objeto con la información de un post, por lo cuál nuestro Pojo debe tener esos mismos campos para representar el post, entonces nuestro Pojo quedaría de la siguiente manera:

1public class Post { 2 private int userId; 3 private int id; 4 private String title; 5 private String body; 6 7 public int getUserId() { 8 return userId; 9 } 10 11 public void setUserId(int userId) { 12 this.userId = userId; 13 } 14 15 public int getId() { 16 return id; 17 } 18 19 public void setId(int id) { 20 this.id = id; 21 } 22 23 public String getTitle() { 24 return title; 25 } 26 27 public void setTitle(String title) { 28 this.title = title; 29 } 30 31 public String getBody() { 32 return body; 33 } 34 35 public void setBody(String body) { 36 this.body = body; 37 } 38} 39

Cómo siguiente paso crearemos una interfaz la cual nos servirá para gestionar cada una de nuestras peticiones a la API, en esta tendremos el siguiente código:

1import java.util.List; 2 3import retrofit2.Call; 4import retrofit2.http.GET; 5 6public interface PostService { 7 8 String API_ROUTE = /posts"; 9 10 @GET(API_ROUTE) 11 Call< List<Post> > getPost(); 12 13} 14

En esta interfaz simplemente estamos definiendo un string que nos va a representar la URI donde se va a realizar la petición y como anteriormente dijimos usamos anotaciones para indicarle a nuestro programa que el método que vamos a utilizar es el método GET y por último indicamos que tipo de datos queremos que devuelva nuestra llamada, en este caso nuestra llamada devolvera una lista de Post el cuál ya construimos anteriormente.

Ahora, en este ejercicio solo mostrare los title de los post en un ListView, teniendo esto en cuenta el siguiente paso es crear nuestro listView en el XML el cuál quedaría de la siguiente manera:

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MainActivity"> 9 <ListView 10 android:id="@+id/list" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent"></ListView> 13</LinearLayout> 14

Ahora en nuestro activity debemos enlazar el ListView con el código Java y configurar el adaptador de nuestro ListView:

1import android.support.v7.app.AppCompatActivity; 2import android.os.Bundle; 3import android.widget.ArrayAdapter; 4import android.widget.ListView; 5 6import java.util.ArrayList; 7 8public class MainActivity extends AppCompatActivity { 9 ListView list; 10 ArrayList<String> titles = new ArrayList<>(); 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 ArrayAdapter arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,titles); 17 list = findViewById(R.id.list); 18 19 list.setAdapter(arrayAdapter); 20 } 21} 22

Ya con esto hecho podemos proceder a hacer nuestra petición de la siguiente manera:

1private void getPosts() { 2 Retrofit retrofit = new Retrofit.Builder() 3 .baseUrl("https://jsonplaceholder.typicode.com") 4 .addConverterFactory(GsonConverterFactory.create()) 5 .build(); 6 PostService postService = retrofit.create(PostService.class); 7 Call< List<Post> > call = postService.getPost(); 8 9 call.enqueue(new Callback<List<Post>>() { 10 @Override 11 public void onResponse(Call<List<Post>> call, Response<List<Post>> response) { 12 for(Post post : response.body()) { 13 titles.add(post.getTitle()); 14 } 15 arrayAdapter.notifyDataSetChanged(); 16 } 17 18 @Override 19 public void onFailure(Call<List<Post>> call, Throwable t) { 20 } 21 }); 22 } 23

Primero que todo instaciamos el Builder de Retrofit el cuál sera el encargado de configurar nuestra petición y con el método baseUrl() agregamos la URL de la API, despues ejecutamos .addConverterFactory(GsonConverterFactory.create()) lo cuál nos permitirá serializar la respuesta de nuestra petición, como siguiente paso creamos un objeto de nuestra interfaz PostService y le asignamos el método retrofit.create() que nos recibe cómo parámetro nuestra interfaz.

El siguiente paso es crear una llamada a la cuál le indicamos que sera una llamada de tipo List< Post >, y le asignamos el metodo getPost() de nuestra interfaz PostService lo cual devuelve un Call, y ya para realizar la llamada ejecutamos el método enqueue() que recibe un objeto tipo Callback como parámetro y este ejecuta una clase anónima, que tiene dos métodos, el primero es el método onResponse(), que se ejecuta en caso que la llamada sea exitosa y en este método solamente actualizamos el listView con el título de cada uno de los post que nos devuelve el método body() del parámetro response y el onFailure() se ejecuta si algo falla en nuestra petición.

Al ejecutar el método getPosts() en el onCreate nuestra aplicación se veria algo asi:

Aplicación

Si quieres saber más sobre android les recuerdo que en EDteam tenemos excelentes cursos para aprender esta tecnología.Android desde ceroAndroid desde cero avanzado bases de datosAndroid desde cero avanzado - Firebase

Espero que les haya gustado, hasta la próxima.

Comentarios de los usuarios

Pregunta a ChatEDT