Al trabajar con aplicaciones Android muchas veces nos surge la necesidad de comunicarnos con bases de datos externas para el intercambio de información, esto se puede conseguir de varias maneras:
- Scripts PHP
- Usando web services, ya sea usando JSON o SOAP, en esté artículo vamos a centrarnos en la conexión con servicios web en asp.net. Para ello usaremos la librería kSoap2 para android.
Uso de kSOAP2 en android
- Lo primero es descargar la librería e importarla en el proyecto que quieres comunicar:
- Definimos 4 variables que usaremos posteriormente
static String NAMESPACE = "http://tempuri.org/"; static String URL = "http://localhost/Servicios/Conexion.asmx"; private String SOAP_ACTION; private String METODO;
- NAMESPACE => El namespace declarado en el webservice, por defecto tempuri.org, es recomendable cambiarlo antes de subirlo a producción.
- URL => La url con la que se comunicará.
- SOAP_ACTION
- MÉTODO => Método del web service a tratar
- Añadir parámetro si se incluyen en la petición, yo por comodidad los incluyo en un hastable y luego los recorro:
SoapObject Solicitud = new SoapObject(NAMESPACE, METODO); Solicitud.addProperty("SOAPAction" ,SOAP_ACTION); if (hsParametros!=null) { Enumeration eParametros=hsParametros.keys(); while (eParametros.hasMoreElements()) { Object obj = eParametros.nextElement(); Solicitud.addProperty(obj+"" ,hsParametros.get(obj)); } }
De una manera simple seria así para un único parametro:
PropertyInfo PrimerParametro = new PropertyInfo (); PrimerParametro.SetName ("Nombre del parámetro"); PrimerParametro.SetValue ("Valor del parámetro"); Solicitud.addProperty (PrimerParametro);
Se crea un objeto de tipo SoapSerializationEnvelope y se inicializa con SoapEnvelope.VER11 como parámetro
SoapSerializationEnvelope Envoltorio = new SoapSerializationEnvelope (SoapEnvelope.VER11);
- Si es un servicio .Net como en nuestro caso se declara como true:
Envoltorio.dotNet = true;
- Se asigna la solictud soap:
Envoltorio.setOutputSoapObject (Solicitud);
- Se setea la url donde se encuentra el servicio
HttpTransportSE TransporteHttp = new HttpTransportSE(URL);
Con ésto tenemos la petición lista para ser lanzada
- Ya sólo queda hacer la llamada al servicio y recoger los datos:
try { TransporteHttp.call (SOAP_ACTION, Envoltorio); }catch (Exception e) { e.printStackTrace(); } //Recogida de datos enviados por el servicio try { SoapObject objSoap= (SoapObject)Envoltorio.getResponse(); if (objSoap!=null) return objSoap; else return null; } catch (Exception e) { e.printStackTrace(); return null; }
- Finalmente, slo hace falta recoger el objeto y hacer un casting al tipo deseado:
for (int i=0; i < resultado.getPropertyCount(); i++) { objSoap.getProperty(i).toString(); }
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.