Conectándonos a una API con Android (AsyncHttpClient)

Diego Jaume

La mayoría de las veces que construimos aplicaciones móviles, nos nace la necesidad de comunicarnos con una API para enviar o extraer información. En Android tenemos librerías como OkHttp o AsyncHttpClient que nos facilitan la tarea y nos permiten hacer esta comunicación de manera asíncrona y ordenada. Hoy revisaremos un ejemplo de como utilizar AsyncHttpClient en nuestros proyectos especificamente haciendo una petición GET.

Lo primero que debemos hacer es instalar AsyncHttpClient mediante Gradle. Para esto primero debemos agregar en el Gradle lo siguiente:

dependencies {
  compile 'com.loopj.android:android-async-http:1.4.9'
}

Luego, cuando queramos usar la librería, debemos importarla de la siguiente forma en nuestras clases:

import com.loopj.android.http.*;

AsyncHttpClient nos permite gestionar las peticiones a la API mediante 4 métodos:

@Override
  public void onStart() {
  // Se inicia antes de que la petición es ejecutada
  }

@Override
  public void onSuccess(int statusCode, Header[] headers, byte[] response) {
  // Se inicia cuando la conexión fue exitosa. En ese caso el valor dentro de "statusCode" será de estado 200
  }

  @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
    // Se inicia cuando la conexión falló. En ese caso el "statusCode" puede tener estados 500,422,etc...
  }

  @Override
    public void onRetry(int retryNo) {
    // Se inicia cuando se reintenta la conexión.
  }

Como mencionamos al inicio, dentro de las características de esta librería es que todas las peticiones son hechas fuera de la hebra principal de la aplicación, permitiendo que el sistema no quede “en espera” de que la petición a la API haya finalizado.

A continuación, mostraremos un ejemplo sencillo de una petición GET donde manejaremos los casos cuando el resultado es exitoso “onSuccess”, y también cuando ocurre algún error durante el proceso “onFailure”.

private void getData() {
  //Se inicia una nueva instancia de AsyncHttpClient bajo el nombre de "client"
  AsyncHttpClient client = new AsyncHttpClient();

  //Se agregan los parametros con sus valores a la nueva instancia para poder hacer la petición.
  client.addHeader("nombre parametro 1",valor parametro 1);
  client.addHeader("nombre parametro 2",valor parametro 2);

  //Se ingresa la url a la cual le haremos la petición
  String url = "http://www.example.com"

  client.get(url, new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
      if (statusCode == 200) {
	  /*Si el estado es 200, entonces la petición fue ejecutada con éxito, y dentro del responseBody vendrá el contenido enviado por el servidor, en este caso como arreglo de bytes. */
      }
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
    //Si el resultado es distinto de 200, capturamos el error y mostramos el error que corresponda al usuario.
      if (statusCode == 401) {
        Toast.makeText(getApplicationContext(), "Usuario no autorizado. Debe volver a iniciar sesión", Toast.LENGTH_SHORT).show();
      }
      else if (statusCode == 500) {
          Toast.makeText(getApplicationContext(), "No se pudo conectar con el servidor", Toast.LENGTH_SHORT).show();
          }else{
            Toast.makeText(getApplicationContext(), "Error.", Toast.LENGTH_SHORT).show();
          }
      }
  });
}

Como conclusión, AsyncHttpClient es una gran alternativa para cuando necesitamos conectarnos fácilmente a una API, permitiéndonos manejar todos los estados y respuestas de las peticiones realizadas.

Toda la información y detalle de su funcionamiento se encuentra en la página oficial de esta librería. Pagina oficial de AsyncHttpClient