Sie sind auf Seite 1von 13

http://androideity.com/2011/11/16/consumiendo-webservice-soap-json-con-android-i/ Consumiendo Web Service S !"-#S $ con !

ndroid %
Escrito por GustavoIvanVega | Wednesday, November 16, 2011 a las 7:19 pm | 5 Comentarios

A hora toca el turno al tema de Consumir Web Services en Android. En esta primer parte del tutorial vamos a repasar algunos trminos importantes sobre el tema de los web services as! como sus venta"as. #ambin vamos hablar un poco de algunas librer!as de terceros las cuales utili$aremos en el desarrollo de nuestra practica para %acilitar el mane"o de algunas de las tecnolog!as a utili$ar . As! &ue sin mas vamos a comen$ar' Que es un web service (ws) y para que nos sirve? (a ma)or!a de los sitios webs grandes *+oogle ,ancos -aceboo. /icroso%t etc.0 usan aplicaciones &ue utili$an servicios webs *web services0. 1n web service es un con"unto de protocolos ) est2ndares &ue sirven para intercambiar datos entre aplicaciones. As! &ue distintas aplicaciones de so%tware desarrolladas en lengua"es de programaci3n di%erentes ) e"ecutadas sobre cual&uier plata%orma pueden utili$ar los servicios web para intercambiar datos en redes de ordenadores como 4nternet esto signi%ica &ue los ws aportan interoperabilidad. (a interoperabildiad se consigue mediante la adopci3n de est2ndares abiertos. El servicio web &ue nosotros utili$aremos esta basado en un estandar abierto llamado S5A6 *Simple 5b"ect Access 6rotocol0 o 7/(896C *7/( 9emote 6rocedure Call0. SOAP de%ine c3mo dos ob"etos en di%erentes procesos pueden comunicarse por medio de intercambio de datos 7/( *mensa"es0. :e manera mas clara un ws es un con"unto de mtodos &ue se pueden invocar por alguna aplicaci3n para reali$ar una tarea comple"a. (a siguiente imagen representa un escenario

de una aplicaci3n cliente &ue puede estar desarrollada en cual&uier lengua"e ) corriendo sobre di%erentes plata%ormas. En ella se muestra como la aplicaci3n esta consumiendo un servicio de una agencia de via"es ) esta a su ve$ consume servicios de otros proveedores *,anco ;otel (inea area0 para &ue la aplicaci3n desarrollada pueda reali$ar muchas actividades con tan solo consumir los servicios ) si es necesarios enviar solo algunos par2metros para e"ecutar operaciones comple"as.

Ahora )a sabemos &ue al invocar un ws se est2n comunicando dos aplicaciones ) esto es posible por el protocolo S5A6 &ue reali$a un intercambio de mensa"es con est2ndar 7/(. Entre mas datos se estn intercambiando entre las aplicaciones los mensa"es crecer2n mas ) el tiempo de entrega se ira incrementando. Esto situaci3n ha hecho &ue ha)a surgido una nuevo %ormato para el intercambio de datos con el %in de hacer mas ligeros los mensa"es de intercambio. Este nuevo %ormato es JSON. JSON (JavaScript Object Notation) es un %ormato ligero para el intercambio de datos. <S5= es un subcon"unto de la notaci3n literal de ob"etos de <avaScript &ue no re&uiere el uso de 7/(. (a simplicidad de <S5= ha dado lugar a la generali$aci3n de su uso especialmente como alternativa a 7/(. #ambin es %recuente el uso de <S5= ) 7/( en la misma aplicaci3n. Con estos trminos )a de%inidos ) repasados para los &ue no recordaban ahora podemos comen$ar a hablar de la aplicaci3n &ue desarrollaremos en este tuto. As! &ue para comen$ar iniciaremos descargando > librer!as de terceros &ue nos a)udaran a simpli%icar

el c3digo necesario para consumir un web service S5A6 con %ormato <S5=? Gson es una biblioteca <ava &ue se puede utili$ar para convertir ob"etos <ava en su representaci3n <S5=. #ambin se puede utili$ar para convertir una cadena <S5= a un e&uivalente de ob"etos <ava. :escarga.

ksoap2 an!roi! es una biblioteca ligera ) e%iciente para web services basados en el protocolo S5A6. :escarga. @a descargando estos recursos estar!amos culminando la primera parte de este tuto en la segunda parte nos estaremos metiendo de lleno tirar lineas de c3digo para %inali$ar nuestra aplicaci3n. "onsu#ien!o $eb Service SOAP JSON con An!roi! %% & Par'e 2

Consumiendo Web Service S !"-#S $ con !ndroid %%


Escrito por GustavoIvanVega | Wednesday, November 16, 2011 a las 7:32 pm | AAB Comentarios

En esta segunda parte del tutorial nos dedicaremos al desarrollo de la aplicacion ) a dar algunas indicaciones eCtras &ue necesitamos para poder probar nuestro desarrollo. El web service *ws0 &ue vamos a consumir %ue reali$ado con tecnologias de AS6.=E# con el ob"etivo de mostrar &ue los ws permiten la interoperabilidad con di%erentes tecnolog!as de desarrollo ) plata%ormas. 6ara no involucrarnos en el desarrollo de ws agregaremos al %inal del tutorial el c3digo ) solo bastara publicarlo como una aplicaci3n web dentro de nuestro servidor web en este caso 44S )a &ue el servicio esta desarrollado con tecnolog!as de /icroso%t. @ por ultimo les eCplico &ue reali$ar2 la apliaci3n. 6or medio de un bot3n invocaremos un web service *utili$ando la librer!a .soap> android0. El web service nos retornar2 una cadena en %ormato <S5= la cual representa una lista de las versiones del Android 5S. @a retornada la

cadena <S5= utili$aremos la librer!a +son &ue nos a)udar2 a desereali$ar esta cadena ) pasarla a un ob"eto Arra)(ist para despus mostrar la lista en un control (istDiew. Sin mas vamos a comen$ar. A0 Creamos un pro)ecto de Android nombrado ConsumirWS.

>0 Agregar ) re%erenciar las librerias &ue se descargaron en la 6arte A de este tutorial. Gson ksoap2 an!roi!

E0 Creamos nuestra 14.

F0 4mportamos todo lo necesario para consumir nuestro ws ) desereali$ar la cadena <S5= &ue nos regresa.

import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList;

import android.app.Activity; import android.os.Bundle; import android.view. iew; import android.view. iew.On!lic"Listener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.List iew;

import org."soap#.$oapEnvelope; import org."soap#.seriali%ation.$oapO&ject; import org."soap#.seriali%ation.$oap'rimitive; import org."soap#.seriali%ation.$oap$eriali%ationEnvelope; import org."soap#.transport.(ttpTransport$E; import org.xmlpull.v).*ml'ull'arserException;

import com.google.gson.+son; import com.google.gson.reflect.TypeTo"en;


50 :eclaraci3n de variables a nivel de clase. El codigo se encuentra comentado.

pu&lic class !onsumir,$Activity extends Activity ..!onstantes para la invocacion del we& service private static final $tring /A0E$'A!E 1 23ttp4..tempuri.org.2; private static $tring 56L123ttp4..)7#.)89.:.#;).Ejemplo,$.$ervice.asmx2; private static final $tring 0ET(O<=/A0E 1 2getAllAndroidO$2; private static final $tring $OA'=A!TIO/ 123ttp4..tempuri.org.getAllAndroidO$2;

..<eclaracion de varia&les para consuymir el we& service

private $oapO&ject re>uest1null; private $oap$eriali%ationEnvelope envelope1null; private $oap'rimitive results6e>uest$OA'1null;

..<eclaracion de varia&les para sereal%iar y desereali%ar ..o&jetos y cadenas ?$O/ +son gson ;

.. aria&les para manipular los controles de la 5I Button &tn; List iew lsvAndroidO$;

@.

.@@ !alled w3en t3e activity is first created. AOverride pu&lic void on!reateBBundle savedInstance$tateC

super.on!reateBsavedInstance$tateC; set!ontent iewB6.layout.mainC; D

D
G0 Se hace la re%erencia a los controles de la 14 ) se implementa el evento clic. del boton &ue invoca al ws. #ambien aHadimos el codigo &ue se encarga de invocar al ws. El codigo se encuentra comentado.

.@@ !alled w3en t3e activity is first created. @. AOverride pu&lic void on!reateBBundle savedInstance$tateC super.on!reateBsavedInstance$tateC; set!ontent iewB6.layout.mainC;

lsvAndroidO$ 1 BList iewCfind iewByIdB6.id.lstC; &tn 1 BButtonCfind iewByIdB6.id .&tnC; &tn.setOn!lic"ListenerBnew On!lic"ListenerBC

AOverride pu&lic void on!lic"B iew vC .. TO<O AutoEgenerated met3od stu&

.. $e crea un o&jeto $oapO&ject para poder reali%ar la peticion

.. constructor reci&e

para consumir el ws $OA'. El

.. el namespace. 'or lo regular el namespace es el dominio .. service donde se encuentra el we&

re>uest 1 new $oapO&jectB/A0E$'A!EF 0ET(O<=/A0EC;

.. $e crea un o&jeto $oap$eriali%ationEnvelope para sereali%ar la .. peticion $OA' y permitir viajar el mensaje por la nu&e .. version de $OA' el constructor reci&e la

envelope 1 new $oap$eriali%ationEnvelopeB$oapEnvelope. E6))C; envelope.dot/et 1 true; ..se asigna true para el caso de >ue el ,$ sea de dot/et

..$e envuelve la peticion soap envelope.setOutput$oapO&jectBre>uestC;

..O&jeto >ue representa el modelo de transporte

..6eci&e la 56L del ws (ttpTransport$E transporte 1 new (ttpTransport$EB56LC;

try ..(ace la llamada al ws transporte.callB$OA'=A!TIO/F envelopeC;

..$e crea un o&jeto $oap'rimitive y se o&tiene la respuesta ..de la peticion results6e>uest$OA' 1 B$oap'rimitiveCenvelope.get6esponseBC;

D catc3 BIOException eC .. TO<O AutoEgenerated catc3 &loc" e.print$tac"TraceBC; D catc3 B*ml'ull'arserException eC catc3 &loc" .. TO<O AutoEgenerated e.print$tac"TraceBC;

..Almacenamos el resultado en un $tring ya >ue lo >ue represa ..el ws es una cadena jsonF representando una lista AndroidO$ ..de o&jetos del tipo $tring str?$O/ 1 results6e>uest$OA'.to$tringBC;

crearListaBstr?$O/C; D DC;

D
I0 Agregamos el metodo &ue se encarga de desereali$ar la cadena <S5= ) mostrar el resultado en un control (istDiew. El codigo se encuentra comentado.

.@@ @ 0etodo >ue reci&e una cadena ?$O/ y la convierte en una lista @ de o&jetos AndroidO$ para despues cargarlos en la lista @ Aparam str?son B$tringC !adena ?$O/ @.

private void crearListaB$tring str?sonC..se crea el o&jeto >ue ayuda desereali%ar la cadena ?$O/ gson 1 new +sonBC;

..O&tenemos el tipo de un ArrayList Type lstT 1 new TypeTo"enG ArrayListHBC -D.getTypeBC;

..!reamos una o&jeto ArrayList ArrayList arrListAO$ 1 new ArrayListBC;

..<esereali%amos la cadena ?$O/ para >ue se convertida a un ArrayList arrListAO$ 1 gson.from?sonBstr?sonF lstTC;

..Asignaos la ArrayList al controls List iew para mostrar ..la lista de $O Android >ue se consumieron del we& service lsvAndroidO$.setAdapterBnew ArrayAdapter BgetApplicationBCF android.6.layout.simple=list=item=)F arrListAO$CC;

D
6or ultimo en nuestro archivo /ani%est ha) &ue agregar el permiso de internet a la aplicaci3n.

J0 Con esto %inali$ariamos el desarrollo de la aplicaci3n solo %alta depurar ) probar. Es mu) importante &ue el ws se encuentre publicado en el servidor 44S ) &ue la pc donde se este desarrollando tenga internet. Con esto %inali$amos el tema de Consumir Web Service S5A6. Si alguno de nuestros lectores les surge alguna duda re%erente al tema estamos a sus ordenes para apo)arles en lo &ue este a nuestro alcance. :esc2rgate el c3digo %uente de este tutorial?

Das könnte Ihnen auch gefallen