Aprende Android: crea un cliente HTTP con HttpURLConnection

Aprende Android: crea un cliente HTTP con HttpURLConnection

http¿Estás desarrollando una aplicación para Android? ¿Necesitas que tu aplicación se comunique con algún servidor solicitándole algún servicio y gestionar la respuesta recibida? Sí ese es tu caso, puede que estas líneas te interesen.

Muchas aplicaciones necesitan solicitar algún servicio a algún servidor que provea la información solicitada por el usuario, ya sea una página web, canciones, imágenes, vídeos, etc. Para poder realizar estas peticiones, el protocolo más utilizado en Internet es el HyperText Transfer Protocol, más conocido por sus siglas “http“.

Una de las formas de implementar la comunicación cliente-servidor con la API de Android es mediante la clase HttpURLConnection, que con unas pocas líneas de código podemos hacer un cliente http totalmente configurable.

Puedes hacer una clase similar a la que muestro a continuación:

public String clienteHttp(String dir_web) throws IOException{

 Sting dir_web = " "; 
 String body = " ";

try {

 URL url = new URL(dir_web);
 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
 Integer codigoRespuesta = Integer.toString(urlConnection.getResponseCode());
 if(codigoRespuesta.equals("200")){//Vemos si es 200 OK y leemos el cuerpo del mensaje.
    body = readStream(urlConnection.getInputStream());
 }
 urlConnection.disconnect();
 } catch (MalformedURLException e) {
    body = e.toString(); //Error URL incorrecta
 } catch (SocketTimeoutException e){
    body = e.toString(); //Error: Finalizado el timeout esperando la respuesta del servidor.
 } catch (Exception e) {
    body = e.toString();//Error diferente a los anteriores.
 }
 return body;
 }

Pasos a seguir:

  1. Crea un objeto de la clase HttpURLConnection, que se conectará a la URL especificada en dir_web (por ejemplo “https://borrowbits.com”).
  2. Con el método getResponseCode() puedes ver el código de estado http devuelto, para saber si se ha podido procesar bien la petición o ha habido algún error (en el cliente o en el servidor).
  3. Si el código es “200 OK”, es que todo ha ido bien y puedes obtener la respuesta recibida con el método readStream().
    Puedes dejarte los ojos buscando este método en la web de Android Developers que no lo vas a encontrar, pero te lo ponen de ejemplo en el apartado en el que explican la clase HttpURLConnection y no especifican que esta clase te la tienes que currar tú mismo, que no existe tal cual en la API. Tranquilos, si os vale de ayuda, os pongo a continuación la que utilizo yo.
  4. Si hay algún error durante la petición, puedes gestionarlo para saber qué ha pasado (en el ejemplo sólo se contemplan dos casos, pero puede haber muchos más).
  5. También puedes configurar el objeto de la clase HttpURLConnection (al que hemos llamado urlConnection) con un gran número de métodos que nos permiten por ejemplo decidir si el método será GET (por defecto) o POST con urlConnection.setDoOutput(true), también se pueden configurar los temporizadores utilizados en la conexión, como por ejemplo el de establecimiento de conexión con urlConnection.setConnectTimeout(2000) y muchos más elementos que desees ajustar.

El método para recibir el streaming de la respuesta del servidor (o response)  que se ha utilizado en el ejemplo es el siguiente:

private String readStream(InputStream in) throws IOException{

 BufferedReader r = null;
 r = new BufferedReader(new InputStreamReader(in));
 StringBuilder total = new StringBuilder();
 String line;
 while ((line = r.readLine()) != null) {
    total.append(line);
 }
 if(r != null){
    r.close();
 }
 in.close();
 return total.toString();
 }

Ya puedes incluir esta herramienta en tu aplicación para que pueda interactuar con el resto de Internet. Cualquier mejora que quieras sugerir o comentario, ¡siempre será bienvenido!

Previous Nichos de mercado: cómo saber si tu idea es viable
Next Nuevos canales de venta para productos frescos

About author

Rafa M.
Rafa M. 51 posts

Ingeniero de Telecomunicación, apasionado de la Seguridad Informática. Le gusta estar al día en todo lo relacionado con Internet y las nuevas tecnologías.

You might also like

Desarrollo 2 Comments

Cómo evitar ser un freelance esclavo (I)

Atención a la contradicción dentro del sintagma nominal del título: freelance esclavo. ¿Es ésto posible? Si no tienes un poco de ojo, ya lo creo. En esta serie de artículos

Android 5 Comments

Aprende Android: crea tu reproductor multimedia con VideoView

¿Estás aprendiendo Android y quieres incluir en tu aplicación un toque multimedia? ¿Quieres tu propio reproductor tanto de vídeos en streaming como de los vídeos almacenados en tu móvil? Android

Desarrollo 20 Comments

Borrar directorio (no vacío) en Linux

  Si estás leyendo, esto probablemente sea porque empiezas a estar muy cabreado y estés considerando seriamente la opción de tirar el portátil por la ventana con tal de cargarte

Android 9 Comments

Sincroniza tus entrenamientos con Garmin Connect, Endomondo, Runtastic, RunKeeper, Nike+ y Strava de forma automática

Si hacer deporte es una de tus pasiones, es probable que te guste monitorizar tus entrenamientos y tener un historial de los mismos. Gracias a los smartphones actuales y otros

Android 3 Comments

¿El fin de WhatsApp?

Con el auge de los smartphones han surgido aplicaciones tales como WhatsApp, que sólo con conectarse a Internet (ya sea a través de wifi o red de datos de nuestro

Desarrollo 3 Comments

How-to: Instalación de Symfony, un framework de PHP

Symfony es PHP. Ni más ni menos. Se trata de un framework que te facilita la vida a la hora de programar una aplicación web, sin la necesidad de profundizar demasiado

Desarrollo 7 Comments

Summernote, un potentísimo editor WYSIWYG en Bootstrap

Hoy traigo carne fresca y gratis. En muchos proyectos web surge la imperiosa necesidad de incluir un editor de texto enriquecido del tipo WYSIWYG, acrónimo de “What You See Is

Tutorial 1Comments

[WordPress] Fatal error: Allowed memory size of 73400320 bytes exhausted

A.K.A. White Screen of Death. Si ya has trabajado con WordPress estoy seguro de que lo anterior te resultará familiar. Horriblemente familiar. Si no has trabajado aún con WordPress pero

Tutorial 10 Comments

How-to: configurar un JSTree sencillo

Uno de los plugin jQuery más útiles de los que he descubierto recientemente es JSTree, un componente javascript bastante completo e interesante para interfaces de usuario basadas en web. Sirve

8 Comments

  1. Marco
    julio 15, 18:24 Reply

    Hola. Gracias por el articulo.
    Una duda, ¿cómo envío una imagen al servidor? Se como subir texto, pero no se cómo el servidor recibe la imagen, para poder guardarla en la ruta correspondiente. Gracias de antemano.

  2. Toni
    julio 07, 20:35 Reply

    Hola, he utilizado tu código complementándolo con un Thread y funciona bien, el problema lo tengo al intentar acceder al mismo fichero alojado en el dropbox, creo que es debido al protocolo de seguridad, ya que utiliza el https, sabes como acceder a un fichero alojado en el dropbox, estoy buscando por la red peor veo muy poca información al respecto.

    Saludos.

  3. Pablo
    abril 27, 04:08 Reply

    Hola. que tal a todos? espero que bien. Yo solo escribo para agradecer el codigo fuente, ya que me ha sido de total utilidad, ademas como es solo 1 practica de coneccion y transferencia de datos minima no lo he tenido que modificar mucho para implementarlo. Bueno, muchas gracias por todo.

    • Rafa M.
      abril 29, 09:37 Reply

      Hola Pablo,

      Me alegro de que te haya sido de utilidad. Si has realizado alguna mejora, no dudes en compartirla con nosotros.
      Un abrazo

  4. ferran
    marzo 17, 19:19 Reply

    Gracias Rafa
    me parece que es lo que estaba buscando , Estoy diseñando una aplicacion (server) en una tablet i otra para moviles , tienen que recoger los datos de la server y devolverlos .
    Voy bien ?
    Gracias

    • Rafa M.
      marzo 17, 20:01 Reply

      Hola Ferrán,

      En el comentario contestando a David puse algunas webs que explican como hacer eso. Ya depende de cómo lo quieras diseñar. En el blog puedes encontrar cómo hacer un Servidor de HTTP con código Java, que atienda las peticiones HTTP, pero si quieres hacer algo más sencillo puedes usar algún servidor web existente como Apache o Tomcat.

      Saludos

  5. Rafa M.
    julio 11, 14:21 Reply

    Hola David,

    Para poder conectarte a una base de datos en un servidor remoto puedes utilizar una base de datos basada en SQL, como MySQL. Encontrarás mucha información en Internet para poder instalarla, configurarla y prepararla para las peticiones remotas. Básicamente lo que haces con tu dispositivo Android es conectarte mediante el protocolo HTTP a tu servidor (es como si te conectaras a una web, generalmente escrita en .php) que atiende las peticiones y devuelve las consultas.
    Para empezar puedes ver estos dos ejemplos en los que te detallan el proceso y te ponen ejemplos funcionales:

    http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/

    http://www.helloandroid.com/tutorials/connecting-mysql-database

    Puedes utilizar el ejemplo que he puesto en el artículo como el “medio” para enviar y recibir las respuestas a tu base de datos utilizando el protocolo HTTP.

    Si en lugar de querer utilizar una base de datos remota, prefieres utilizar una base de datos local en tu dispositivo, hay una clase diseñada para ese fin:
    http://developer.android.com/training/basics/data-storage/databases.html

    Espero que estos enlaces te sirvan de ayuda.

    ¡Un abrazo!

  6. David
    julio 05, 22:15 Reply

    Hola, gracias por el ejemplo, pero me gustaría que me puedas orientar para saber que metodo puedo utilizar para enviar datos desde mi aplicación de android y almacenarla en una base de datos que este en el servidor. De momento guardo los datos en una base de datos en el telefono, pero ahora quiero guardar esa información en una DB externa. Gracias

Leave a Reply