Conectando con el mundo mediante HTTP

miércoles, 3 de agosto de 2011 Etiquetas: , , ,

Introducción

Cuando programas una aplicación para un smartphone, lo más normal que acabes necesitando conectarte a internet para obtener algún dato. Por lo menos yo si que he tenido la necesidad conectarme a una web para obtener datos que después mostraré en la aplicación.

Al utilizar Java para el desarrollo de las aplicaciones de Android, pues nos basamos en las librerías que proporciona este lenguaje para la conexión a redes. Concretamente las que encontramos en el paquete java.net [1]. Voy a enseñar como relice la conexión, he visto variedad de posibilidades, pero con esta me funciona sin problemas, así que la muestro por si a alguien le puede servir de ayuda.


Conexión HTTP
El código es sencillo, creamos la URL con la dirección web a la que queremos acceder. Después basándonos en  esta abrimos la conexión mediante el objeto HttpURLConnection.. Una vez tenemos la conexión abrimos el stream mediante el cual leeremos la información que nos envíe el servidor.

A continuación os pongo el código que utilizo para conectarme a una página de internet mediante el protocolo http. Lee bytes por lo que se puede utilizar para descargar imágenes o archivos si no se convierte a String. También se puede ver un ejemplo de descarga directamente del texto en el blog GR3P [2]

URL url = new URL("http://elrobotitoverde.blogspot.com");
HttpURLConnection conexion=(HttpURLConnection)url.openConnection();

/*Asigno algunas propiedades a la conexión*/
conexion.setRequestMethod("GET");
conexion.setRequestProperty("Content-Language","es-ES");

/*La lectura de datos la hago leyendo bytes
  Así puedo descargar ficheros que no son texto, en este caso 
  lo convertiré después a texto*/
InputStream input;
StringBuffer responseBuffer = new StringBuffer();
try {     
  input = new BufferedInputStream(conexion.getInputStream(),1024);    
                  
  byte[] byteArray = new byte[1024]; 
  int leidos=0;
  while ( (leidos=input.read(byteArray))>0){      
    String res = new String(byteArray, "iso-8859-1");           
 responseBuffer.append(res.substring(0,leidos));
 byteArray = null;
 byteArray = new byte[1024];             
  }
  
          
  String response = responseBuffer.toString();
  /*Liberamos las conexiones y entrada de datos.
   Si no se hace puede dar problemas después de varias conexiones.*/
  input.close(); 
  conexion.disconnect();         
  conexion=null;

Al código le falta la parte que lee capturas las posibles excepciones que se puedan producir durante la ejecución. Las he obviado para dejar mas claro el código. Una vez tenemos nuestro código de conexión debemos indicar en el Manifest que nuestra aplicación se conecta a internet. Esto se realiza añadiendo la siguiente linea:


<manifest android:versioncode="1" android:versionname="0.3" 
package="blg.robotitoverde" 
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
.....

Una vez realizados estos pasos ya podremos recibir los datos de la url que deseemos.

Bibliografía y Enlaces
[1]Java Refence(2011)Javadoc(inglés)
[2]Federico Erostarbe(Marzo 2011)Conexión http desde Android (Castellano)

0 comentarios:

Publicar un comentario