Consumir WebService hecho en PHP desde Android

4,656 views
Skip to first unread message

Sergio Sanz Moyano

unread,
Jun 5, 2012, 1:55:58 PM6/5/12
to desarrollad...@googlegroups.com
Hola,

Estoy intentando consumir un WebService desde una aplicación Android pero no lo consigo. El WebService me funciona porque tengo otra página PHP que consume el webservice y funciona. Pero lo que pasa es que no sé llamarlo desde Android. Creo que es que algún concepto no lo tengo claro y pongo un valor incorrecto en la llamada. El móvil donde ejecuto la aplicación está en la misma red que donde está el webservice.

A continuación pongo el wdsl y el código que utilizo en Android. El error que me pone es el siguiente:
org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='SMB_GestionBoda' targetNamespace='http://192.168.0.10/webservice/SMB_GestionBoda.wdsl'>@6:43 in java.io.InputStreamReader@405d85f0) 


WEBSERVICE
<?xml version="1.0" encoding="utf-8"?>
<definitions name='SMB_GestionBoda'
<message name='GetProvidersRequest'>
<part name='id_task' type='xsd:int'/>
<part name='city' type='xsd:string'/>
</message>
<message name='GetProvidersResponse'>
<part name='result'/>
</message>

<portType name='SMB_GestionBodaPortType'>
<operation name='GetProviders'>
<input message='tns:GetProvidersRequest'/>
<output message='tns:GetProvidersResponse'/>
</operation>
</portType>

<binding name='SMB_GestionBodaBinding' type='tns:SMB_GestionBodaPortType'>
<soap:binding style='rpc'
<operation name='GetProviders'>
<soap:operation soapAction='urn:192.168.0.10-SMB_GestionBoda#GetProviders'/>
<input>
<soap:body use='encoded' namespace='urn:192.168.0.10-SMB_GestionBoda'
</input>
<output>
<soap:body use='encoded' namespace='urn:192.168.0.10-SMB_GestionBoda'
</output>
</operation>
</binding>

<service name='SMB_GestionBodaService'>
<port name='SMB_GestionBodaPort' binding='SMB_GestionBodaBinding'>
</port>
</service>
</definitions>



APLICACIÓN ANDROID
//Constantes para la invocacion del web service
final String METHOD_NAME = "GetProviders";
final String SOAP_ACTION = "http://192.168.0.10/webservice/GetProviders.php";  
/*Se crea un objeto SoapObject para poder realizar la peticion
para consumir el ws SOAP. El constructor recibe
el namespace. Por lo regular el namespace es el dominio 
donde se encuentra el web service*/
request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("id_task",0);
request.addProperty("city","valencia");
/*Se crea un objeto SoapSerializationEnvelope para serealizar la
peticion SOAP y permitir viajar el mensaje por la nube
el constructor recibe la version de SOAP*/
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = false; //se asigna true para el caso de que el WS sea de dotNet
//Se envuelve la peticion soap
envelope.setOutputSoapObject(request);

//Objeto que representa el modelo de transporte
//Recibe la URL del ws
HttpTransportSE transporte = new HttpTransportSE(URL);
try {
//Hace la llamada al ws
transporte.call(SOAP_ACTION, envelope);
//Se crea un objeto SoapPrimitive y se obtiene la respuesta 
//de la peticion
resultsRequestSOAP = (SoapPrimitive)envelope.getResponse();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Almacenamos el resultado en un String ya que lo que represa
//el ws es una cadena json, representando una lista AndroidOS
//de objetos del tipo 
String  strJSON = resultsRequestSOAP.toString();

Leonardo Fernandez

unread,
Aug 16, 2012, 8:56:07 AM8/16/12
to desarrollad...@googlegroups.com
?

El 15 de agosto de 2012 23:59, Jhan Figueroa Figueroa <jhan.f...@gmail.com> escribió:
Estas usando un localhost por lo que veo , en android se sugiere que en vez de la ip del localhost(192.168.0.10 ó 127.0.0.1 o cualquiera) , tienes que poner 10.0.2.2 =). 
--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/oGBPy5oF9_EJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Gabriel Pozo

unread,
Aug 16, 2012, 9:16:05 AM8/16/12
to desarrollad...@googlegroups.com
La verdad no tengo tiempo para ver el codigo, pero Jhan, lo que estas escribiendo no tiene mucho sentido. Primero que normalmente 192.168.0.10 no es la IP de localhost (la que normalmente es localhost es 127.0.0.1 , a menos que lo modifiques) y poner otro la IP interna como 10.0.2.2 no se en que cambiaría la cosa, es mas eso dependería mas de como tu router este configurado.


El 16/08/12 09:56, Leonardo Fernandez escribió:

Gabriel Pozo

unread,
Aug 16, 2012, 9:25:06 AM8/16/12
to desarrollad...@googlegroups.com
Lo único que te puedo decir, para agregar algo , es que veas estos dos manuales:

http://programa-con-google.blogspot.com.ar/2010/12/android-como-consumir-un-servicio-web.html
http://androideity.com/2011/11/16/consumiendo-web-service-soap-json-con-android-i/

Y esta librería:

http://code.google.com/p/ksoap2-android/

El problema creo que esta dentro de ese try {}



El 16/08/12 09:56, Leonardo Fernandez escribió:
?

Leonardo Fernandez

unread,
Aug 16, 2012, 9:29:50 AM8/16/12
to desarrollad...@googlegroups.com
Por lo poco que se la ip 10.x.x.x corresponde al nateo interno del emulador virtual con el equipo local por lo que es valido para pruebas en el equipo de desarrollo, para produccion no seria la 10.x.x.x ni la 192.x.x.x sino la ip publica del server...
Al postre esta no es la pregunta del tema... sobre para el caso siempre se recomienda ver la libreria KSoap... hay varios hilos sobre este tema, es solo mirar el historial y cualquier duda mostrar lo que hiciste y ver lo que pasa...

Sergio Sanz Moyano

unread,
Aug 16, 2012, 9:39:16 AM8/16/12
to desarrollad...@googlegroups.com
Gracias por las respuestas, al final lo que hice fue obtener la información con simples GETS y POSTS a un archivo php. Pero gracias a todos por las respuestas, para la próxima vez miraré con atención los enlaces que me has puesto Gabril.

Para la forma que digo que lo he hecho dejo el enlace que utilicé por si le sirve a alguien:

Saludos.
?

Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/oGBPy5oF9_EJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com
?

Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/oGBPy5oF9_EJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

Sergio Sanz Moyano

unread,
Aug 23, 2012, 11:23:58 AM8/23/12
to desarrollad...@googlegroups.com
Hola,

Pues  como al final lo solucioné con GETS y POST borré el código. Pero en el primer comentario copié tanto el webservice como el código que utilicé para llamarlo.

saludos,

El jueves, 23 de agosto de 2012 17:17:50 UTC+2, Nahuel Pratto escribió:
hola Sergio, tengo un problema abri tu enlace para descargar el fuente de la aplicacion para consumir el WS pero no tuve exito, me podes pasar el fuente o subirlo en algun lado?

Muchas gracias,
Saludos desde uruguay

El jueves, 16 de agosto de 2012 11:30:52 UTC-3, Jhan Figueroa Figueroa escribió:
También tenia problemas cuando probaba del servidor en la compu ....y el emulador si bien  tienes razón que normalmente es 192.168.0.1 o 127.0.0.1 , claro es lógico pero Google recomienda la ip 10.0.2.2 cuando usas emulador nuevo  http://localhost/"mi server" <--- eso es lo usual pero ent u computadora seriá http://10.0.2.2/mi server . A mi me funciono para hacer pruebas con Json localmente, porque el 127.0.0.1 y la sotras ip  locales no sirven para hacer pruebas. Bueno supongo que con el ksoap tendira otra emulacion de ips locales .

?

Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/oGBPy5oF9_EJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com
Reply all
Reply to author
Forward
Message has been deleted
0 new messages