Programación

Comunicación de aplicaciones android con servicios web - soap

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

  1. Lo primero es descargar la librería e importarla en el proyecto que quieres comunicar:
  2. 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
  3. 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);
    
  4. Si es un servicio .Net como en nuestro caso se declara como true:
    Envoltorio.dotNet = true;
  5. Se asigna la solictud soap:
    Envoltorio.setOutputSoapObject (Solicitud);
  6. Se setea la url donde se encuentra el servicio
    HttpTransportSE TransporteHttp = new HttpTransportSE(URL);
    Con ésto tenemos la petición lista para ser lanzada
  7. 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;
    }
        
    
  8. 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();
    }
  9. Si quieres leer más articulos como este, sigueme => @ander_gs
Compartir en: