Consumir WebService Creado en PHP con J2ME

En esta ocasión vamos a elaborar una aplicación móvil para consumir el webservice que ya hemos creado en php, usaremos j2me para lograr esto y nuestra interfaz tendrá un aspecto como el siguiente:

img1

Bien, comencemos a desarrollar la aplicación, es de aclarar que estoy utilizando netbeans 6.9.1 para la creación de dicha aplicación.

Inicialmente abrimos netbeans y seleccionamos la opción proyecto nuevo en la barra de menú, se nos abrirá una ventana como la siguiente:

img2

Allí Seleccionamos la Categoría Java ME y en proyecto escogemos Mobile Application, presionamos el botón siguiente, luego aparecerá la siguiente ventana:

img3

En esta ventana escribimos el nombre del proyecto que será: consume_webservice_php y luego hacemos clic en siguiente, observaremos esta otra interfaz:

img4

Aquí marcamos la Casilla Midp-2.0 y volvemos a hacer clic en siguiente:

img5

Presionamos el botón terminar, veremos que se nos carga una aplicación simple de la siguiente manera:

img6

luego agregamos varios elementos al screen o pantalla principal de nuestra aplicación como lo son:

1 StringItem, 1 gauge, 3 textfield y 4 okcommand, como se observa en la ventana a continuación:

img7

de esta manera tenemos nuestro diseño de la aplicación listo, ahora hace falta hacer uso de la librería que nos permitirá implementar el protocolo soap en j2me, nos referimos a ksoap y puede ser descargada desde aquí.

una vez descargada, la pegamos dentro de la carpeta src de nuestro proyecto, podemos crear una nueva llamada lib y allí alojarla, tal y como se ve en la imagen:

img8

luego, debemos agregar la referencia de la librería al proyecto, para ello presionamos clic derecho sobre el nombre del proyecto y en el menú contextual que aparece escogemos la opción propiedades (ultima opción)

img9

Luego, en la siguiente ventana que aparece, seleccionamos la categoría librerías y recursos, y en la parte derecha presionamos el botón agregar jar/zip tal y como se ve en la imagen:

img10

una vez hecho esto, se abrirá una nueva ventana desde donde podemos buscar la librería ksoap dentro de la carpeta lib de src en nuestro proyecto como se a continuación:

img11

presionamos el botón abrir y luego ok

img12

Listo, ahora se puede apreciar (en la parte izquierda de la ventana) que se ha agregado un nuevo paquete al proyecto que corresponde a la librería ksoap.

img13

ahora si podemos pasar al código, Presionamos la pestaña source y agregamos los siguientes imports:


import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransport;

import org.xmlpull.v1.XmlPullParserException;

ahora agregamos las siguientes 2 variables como globales dentro de la clase principal HelloMidlet:

private String url = "http://192.168.33.1/ejemplows/servicio_web.php"
String encontro="";

después de esto procedemos a programar en cada uno de los okcommand, comencemos con okCommand_conexion, pero antes creemos la función probar_conexion_ws() que será invocada por este botón, el código de dicha función es:


//creo la funcion para probar la conexion con el webservice

public void probar_conexion_ws() throws Exception {

StringBuffer stringBuffer = new StringBuffer();

String valor_mensaje,mensaje_m;

valor_mensaje="";

System.out.println("entro 1");

// add service call

String method = "enviar_respuesta";

SoapObject client = new SoapObject(url, method);

System.out.println("entro 2");

client.addProperty("parametro", "Funciona");

HttpTransport transport = new HttpTransport(url);

System.out.println("entro 3");

// creating the Soap Envelope

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = client;

System.out.println("entro 4");

// call the WebService

try {

transport.call(method, envelope);

System.out.println("entro 5");

} catch(XmlPullParserException io) {

System.err.println(io);

}

System.out.println("entro 6");

// format the Result

String result = envelope.getResponse().toString();

stringBuffer.append(result);

valor_mensaje=stringBuffer.toString();

this.stringItem_prueba.setText(valor_mensaje);

this.gauge.setValue(100);

}

ahora si podemos llamar la función desde nuestro okcommand para ello presionamos click derecho sobre el okcommand_conexion (de la pantalla principal) y en el menú contextual que aparece seleccionamos la opción go to source, como se ve en la imagen:

img14

luego en la sección de código a la que nos lleva escribiremos el llamado a la función  probar_conexion_ws() de la siguiente manera:


try {

probar_conexion_ws();

System.out.println("entro a correr si");

} catch (Exception ex) {

System.out.println("hola jacen "+ex);

}

de la misma manera programamos el botón u okcommand_nuevo, el cual se encargara de borrar el texto que haya en los text:

//aqui va el codigo para el boton nuevo, lo que hago es que borro los text
this.textField_cedula.setString("");
this.textField_nombre.setString("");
this.textField_apellidos.setString("");

Pasemos ahora al okcommand_guardar, pero primero vamos a crear la función guardar_datos() a continuación:

//......creo una funcion para guardar los datos.........
public void guardar_datos() throws Exception {

StringBuffer stringBuffer = new StringBuffer();

String valor_mensaje,mensaje_m;

valor_mensaje="";

System.out.println("entro 1");

// add service call

String method = "registrar_datos";

SoapObject client = new SoapObject(url, method);

System.out.println("entro 2");

client.addProperty("parametro",this.textField_cedula.getString());

client.addProperty("parametro2",this.textField_nombre.getString());

client.addProperty("parametro3",this.textField_apellidos.getString());

HttpTransport transport = new HttpTransport(url);

System.out.println("entro 3");

// creating the Soap Envelope

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = client;

System.out.println("entro 4");

// call the WebService

try {

transport.call(method, envelope);

System.out.println("entro 5");

} catch(XmlPullParserException io) {

System.err.println(io);

}

System.out.println("entro 6");

// format the Result

String result = envelope.getResponse().toString();

stringBuffer.append(result);

valor_mensaje=stringBuffer.toString();

this.stringItem_prueba.setText("");

if(valor_mensaje.equals("Si")){

this.stringItem_prueba.setText("Datos Guardados correctamente!");

}

else{

this.stringItem_prueba.setText("No Fue Posible Guardar!");

}

}

Bien, después de esto si podemos hacer el llamado a la función guardar_datos() dentro de la sección de código del okcommand_guardar asi:

//aqui va el codigo para el boton guardar datos
try {

guardar_datos();

System.out.println("entro a correr si");

} catch (Exception ex) {

System.out.println("hola jacen "+ex);
}

Por ultimo solo nos hace falta programar el okcommand_buscar, pero como hemos hecho en las demás opciones, aquí también vamos a crear una función llamada buscar_datos() que se encargara de verificar si la persona a buscar por la cedula se encuentra o no registrado en la base de datos.
este es el código:

//creo una funcion para buscar los datos
public void buscar_datos() throws Exception {

StringBuffer stringBuffer = new StringBuffer();

String valor_mensaje,mensaje_m;

valor_mensaje="";

System.out.println("entro 1");

// add service call

String method = "buscar_datos";

SoapObject client = new SoapObject(url, method);

System.out.println("entro 2");

client.addProperty("cedula",this.textField_cedula.getString());

HttpTransport transport = new HttpTransport(url);

System.out.println("entro 3");

// creating the Soap Envelope

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = client;

System.out.println("entro 4");

// call the WebService

try {

transport.call(method, envelope);

System.out.println("entro 5");

} catch(XmlPullParserException io) {

System.err.println(io);

}

System.out.println("entro 6");

// format the Result

String result = envelope.getResponse().toString();

stringBuffer.append(result);

valor_mensaje=stringBuffer.toString();

encontro=valor_mensaje;

}

Bien, como es de notarse, la función buscar_datos() solo nos permite verificar si una persona existe o no en la base de datos, sin embargo si deseamos mostrar los datos de una persona asociados a la cedula y que se encuentra en la base de datos, deberemos implementar las siguientes funciones mostrar_cedula(), mostrar_nombre(), mostrar_apellidos() una para cada campo del registro existente en la base de datos, a continuación desarrollaremos cada una de ellas:

//........comienzo procedimiento para mostrar los datos...........

//procedimiento para mostrar la cedula de la base de datos

public void mostrar_cedula() throws Exception {

StringBuffer stringBuffer = new StringBuffer();

String valor_mensaje,mensaje_m;

valor_mensaje="";

System.out.println("entro 1");

// add service call

String method = "mostrar_datos_cedula";

SoapObject client = new SoapObject(url, method);

System.out.println("entro 2");

client.addProperty("cedula",this.textField_cedula.getString());

HttpTransport transport = new HttpTransport(url);

System.out.println("entro 3");

// creating the Soap Envelope

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = client;

System.out.println("entro 4");

// call the WebService

try {

transport.call(method, envelope);

System.out.println("entro 5");

} catch(XmlPullParserException io) {

System.err.println(io);

}

System.out.println("entro 6");

// format the Result

String result = envelope.getResponse().toString();

stringBuffer.append(result);

valor_mensaje=stringBuffer.toString();

this.textField_cedula.setString(valor_mensaje);

}

//mostrar datos....nombre..................

public void mostrar_nombre() throws Exception {

StringBuffer stringBuffer = new StringBuffer();

String valor_mensaje,mensaje_m;

valor_mensaje="";

System.out.println("entro 1");

// add service call

String method = "mostrar_datos_nombre";

SoapObject client = new SoapObject(url, method);

System.out.println("entro 2");

client.addProperty("cedula",this.textField_cedula.getString());

HttpTransport transport = new HttpTransport(url);

System.out.println("entro 3");

// creating the Soap Envelope

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = client;

System.out.println("entro 4");

// call the WebService

try {

transport.call(method, envelope);

System.out.println("entro 5");

} catch(XmlPullParserException io) {

System.err.println(io);

}

System.out.println("entro 6");

// format the Result

String result = envelope.getResponse().toString();

stringBuffer.append(result);

valor_mensaje=stringBuffer.toString();

this.textField_nombre.setString(valor_mensaje);

}

//mostrar_datos....apellidos............................

public void mostrar_apellidos() throws Exception {

StringBuffer stringBuffer = new StringBuffer();

String valor_mensaje,mensaje_m;

valor_mensaje="";

System.out.println("entro 1");

// add service call

String method = "mostrar_datos_apellido";

SoapObject client = new SoapObject(url, method);

System.out.println("entro 2");

client.addProperty("cedula",this.textField_cedula.getString());

HttpTransport transport = new HttpTransport(url);

System.out.println("entro 3");

// creating the Soap Envelope

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = client;

System.out.println("entro 4");

// call the WebService

try {

transport.call(method, envelope);

System.out.println("entro 5");

} catch(XmlPullParserException io) {

System.err.println(io);

}

System.out.println("entro 6");

// format the Result

String result = envelope.getResponse().toString();

stringBuffer.append(result);

valor_mensaje=stringBuffer.toString();

this.textField_apellidos.setString(valor_mensaje);

}

Después de todo esto, con el procedimiento de búsqueda y muestra de datos listos, podemos hacer el llamado de estas funciones dentro de la sección de código del okcommand_buscar de la siguiente manera:

//aqui va el codigo para la funcion buscar datos
try {

encontro="No";

buscar_datos();

if(encontro.equals("Si")){

//muestro los datos teniendo en cuenta cada una de las funciones creadas

this.stringItem_prueba.setText("");

mostrar_cedula();

mostrar_nombre();

mostrar_apellidos();

}

else{

this.textField_cedula.setString("");

this.textField_nombre.setString("");

this.textField_apellidos.setString("");

this.stringItem_prueba.setText("");

this.stringItem_prueba.setText("Usuario no Encontrado en la Base de datos");

}

System.out.println("entro a correr si");

} catch (Exception ex) {

System.out.println("hola jacen "+ex);

}

Bien de esta manera hemos terminado en lo que a programación respecta de nuestra aplicación, ahora podemos hacerle pruebas.
Una vez ejecutada esta, escogemos la opción menú y allí seleccionamos la opción probar conexión.img16a

Si estamos en la misma red en la que se encuentra alojado el servicio web la conexión será exitosa, veremos un mensaje de notificación en la parte superior y el control gauge se llenara como en la siguiente imagen:
img15a

Luego podemos proceder a registrar algunos datos, para ello primero ingresamos los datos respectivos y escogemos del menú la opción Guardar Datos

img15b

si el proceso es efectuado correctamente veremos un mensaje en la parte superior indicando lo ocurrido:
img16

Bueno, hemos verificado que la aplicación funciona correctamente, si desean probar en un celular solo hay que presionar clic derecho sobre el nombre del proyecto en netbeans y en el menú contextual que aparece, escoger la opción clean & build para que se genere el archivo jar.

img17

Luego, nos dirigimos a la carpeta dist del proyecto (en el directorio de programas de netbeans) y transferimos al teléfono móvil el archivo llamado consume_webservice_php.jar.

img18

Posteriormente procedemos a instalarlo y si las configuraciones de red son correctas se observara a la aplicación funcionando como debe ser.

Eso es todo amigos, espero y esta aplicación les sea de utilidad, si deseas descargar la aplicación, mas adelante esta el enlace.

Descargar Aplicación

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s