Consumiendo un WebService de PHP con Java y Android con librería ksoap2
By: Date: mayo 21, 2013 Categories: Programación

Este articulo se lo dedico a Jakofff Parker ‏Twitter @jakofff , quien en mi momento de mayor frustración al no poder consumir el WebServices en Java tuvo la paciencia y la amabilidad de escribirme un código de ejemplo. El cual prácticamente era mi mismo código, pero con ciertos detalles que si no fueran por el y en mi frustración simplemente no los habría visto. El código de Jakofff lo publicare al final del artículo.

El WebService a consumir escrito en PHP ya lo había publicado en el articulo de “WebService en PHP consumidos en C#” por lo que me ire directo al codigo de Java que lo consume en una aplicación Android.

package net.lastdragon.webservices;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;

public class MainActivity extends Activity {

   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
    }

    public String webservices (String Nombre) {
       
        final String SOAP_ACTION =
“urn:webserv”;
        final String METHOD = “saludo”;
        final String NAMESPACE =
“urn:webserv”;
        final String ENDPOINTWS = 
“https://www.lastdragon.net/misarchivos/webserv/serv.php”;
        String res = null;
       
        try  {
            SoapObject
userRequest=new SoapObject(NAMESPACE, METHOD);
           
userRequest.addProperty(“nombre”, Nombre);
          
           
SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
           
envelope.setOutputSoapObject(userRequest);
           
HttpTransportSE  androidHttpTransport = new HttpTransportSE
(ENDPOINTWS);
           
androidHttpTransport.debug = true;
           
androidHttpTransport.call(SOAP_ACTION, envelope);
           
            //la
respuesta es una cadena
            res
= envelope.getResponse().toString();

            //si
la respuesta es un tipo de dato, o estructura compleja usa esto
           
//SoapObject resp = (SoapObject)envelope.getResponse();
           
//String id = resp.getProperty(“id”).toString();
           
           
           
        } catch (Exception e) {
           
e.printStackTrace();
        }
        return res;
   
       
    }
   
    public void clickboton (View v) {
       
        TextView textosalida = (TextView)
findViewById(R.id.salida);
        EditText textoentrada =
(EditText) findViewById(R.id.entrada);
       
       
textosalida.setText(webservices(textoentrada.getText().toString() ) );
    }

En el Manifiesto de Android debe agregarse el permiso para Internet.

 <uses-permission android:name=”android.permission.INTERNET”
/>

Android WebServices

La librería a importar como Jar Externo es ksoap2-android-assembly-3.0.0-jar-with-dependencies, el código es muy sencillo.

Básicamente todo ocurre cuando se activa el evento del botón onClick que ejecuta el codigo de clickboton, ahí en clickboton ocurre la magia.

Donde es llamado el WebService alimentado por el EditText y la salida resultante es mostrada en el TextView

El código de Jakofff es casi igual, excepto en la clase AndroidHttpTransport la cual es válida en la librería que usa el que es KSoup 2.6.0 pero que esta descontinuado en la librería que uso yo versión 3.0.0 donde la clase se sustituye por HttpTransportSE .

package com.pruebas;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

public class Util {
   
    // nuevos para WS
    public static final String SOAP_ACTION =
“urn:webserv”;
    public static final String METHOD = “saludo”;
    public static final String NAMESPACE = “urn:webserv”;
    public static final String ENDPOINTWS = 
“https://www.lastdragon.net/misarchivos/webserv/serv.php”;
   
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String r = response(“Jakoff”);
        System.out.println(r);
    }
   
    public static String response(String name){
        String res = null;
        try  {
            SoapObject
userRequest=new SoapObject(NAMESPACE, METHOD);
           
userRequest.addProperty(“nombre”, name);
          
           
SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
           
envelope.setOutputSoapObject(userRequest);
           
AndroidHttpTransport androidHttpTransport = new
AndroidHttpTransport(ENDPOINTWS);
           
androidHttpTransport.debug = true;
           
androidHttpTransport.call(SOAP_ACTION, envelope);
           
            //la
respuesta es una cadena
            res
= envelope.getResponse().toString();

            //si
la respuesta es un tipo de dato, o estructura compleja usa esto
           
//SoapObject resp = (SoapObject)envelope.getResponse();
           
//String id = resp.getProperty(“id”).toString();
           
           
           
        } catch (Exception e) {
           
e.printStackTrace();
        }
        return res;
    }
}

Lo importante del código de Jakofff es que muestra que aunque Ksoup esta pensado para ser usado en Android, también puede implementarse en un programa de consola de Java, ya sea texto o GUI con AWT o Swing

6 thoughts on “Consumiendo un WebService de PHP con Java y Android con librería ksoap2

  1. Mozilla Firefox 21.0 Windows 8

    Esto solo es valido para la API 10 hacia abajo de Android, ya que si se intenta hacer este mismo código en una API posterior a la 10, regresará un error y esto es porque Android 3.0 y posteriores pide que las conexiones se hagan en otro hilo.

    Gracias por el tutorial

  2. Google Chrome 46.0.2490.86 Windows 7

    Hola soy nuevo en android actualmente estoy tratando de consumir un web service de PHP y utilizo la libreria KSOAP2 pero me no ha funcionado trato de conectarme pero no da , pero al contrario me conecto a un web service de ASP.NET y si funciona. crei que estaba mal mi web service de PHP pero lo probé con un cliente de php y funciona perfectamente. entonces si podrias ayudarme un poco te agradecería mucho.

  3. Google Chrome 46.0.2490.86 Windows NT

    Hola esteban, supongo que estas usando una API reciente, este codigo era valido en un android 2.1, ahora por regla todo metodo bloqueador que vaya escrito dentro de una activity debe ser llamado por un hilo para no bloquear la aplicacion mientras el webservice responde.

Deja un comentario

Tu dirección de correo electrónico no será publicada.