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:
- 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();
}