Consumir Web Service con J2ME

Una aplicacion muy util para un dispositivo movil es aquella que pueda usar recursos de la web para ofrecer informacion al usuario y que esté disponbible en todo momento. En esta ocasion vamos a elaborar una aplicacion en el lenguaje de java para dispositivos moviles llamado J2ME y basicamente lo que hara será conectarse con el servicio web que hemos creado con anterioridad (para ver el post de la creacion del web service has clic Aqui) y gestionar datos de usuarios en una base de datos realizando procesos elementales como guardado y busqueda, nuestra aplicacion tendra un aspecto como el siguiente:

Bien, para empezar hagamos lo siguiente…

Creamos un nuevo proyecto en Netbeans de tipo Mobile Aplication tal y como se ve en la imagen:

Luego, presionamos el boton siguiente y le damos nombre a nuestro proyecto:

Luego damos clic en siguiente y en este paso colocamos la configuracion Device Profile en Midp-2.0 que es la que soportan la mayoria de telefonos moviles.

Continuamos haciendo clic sobre siguiente y en la ventana que aparece presionamos el boton Terminar ya que no hay que configurar mas opciones.

Luego, nos aparecerar la siguiente ventana desde donde podremos agregar el webservice, procedemos haciendo clic derecho sobre el proyecto y en el menu desplegable que aparece seleccionamos la opcion nuevo y despues buscamos la opcion que dice Java ME Web Service client, tal y como se ve en la imagen:

en la ventana que aparece copiamos la wsdl en el campo WSDL url:

Luego hacemos clic sobre el boton Retrieve WSDL para traer los metodos del web service y por ultimo presionamos el boton terminar

 automaticamente se nos abrira una ventana que muestra los detalles del servicio web que hemos agregado como la siguiente:

Luego nos dirigimos a la pestaña HelloMidlet, nos aparecera una interfaz como la siguiente, (agregamos 2 okcommands de la paleta)

Ahora le cambiamos el nombre a los okbutton para que se nos haga mas facil referirnos a ellos, 1 es para guardar y el otro para buscar

A continuacion nos pasamos a la pestaña screen de hellomidlet y elaboramos una interfaz similar a la siguiente:

Para lograr esta interfaz debemos añadir varios textfield al form y un stringitem para visualizar el resultado.

Bien ahora si pasamos al codigo, para ir alla, hacemos clic sobre la pestaña flow y presionamos clic derecho sobre el okcommand llamado okguardar y en el menu desplegable que aparece seleccionamos go to Source tal y como se ve en la imagen:

Ahora nos aparece la seccion de programacion para el boton okguardar, pero primero nos dirijimos a la parte superior del documento donde se ubican los imports y colocamos el siguiente que hara referencia a nuestro webservice.

import proceso_wc.proceso_wcService_Stub;

Luego pasamos a la seeccion de codigo del command okguardar y colocamos lo siguiente:

try{

proceso_wc.proceso_wcService_Stub sw=new proceso_wcService_Stub();

String ced,nom,ape,dir,se;

ced=String.valueOf(this.textField_cedula.getString());

nom=String.valueOf(this.textField_nombre.getString());

ape=String.valueOf(this.textField_apellidos.getString());

dir=String.valueOf(this.textField_direccion.getString());;

se=String.valueOf(this.textField_sexo.getString());;

boolean salida;

salida=sw.insertarUsuario(ced,nom,ape,dir,se);

if(salida==true){

this.stringItem_resultado.setText("Registro exitoso!");

}else{

this.stringItem_resultado.setText("No fue posible guardar, Verifique!");

}

}

catch(Exception e){

}

Podemos hacerle una prueba a la aplicacion, la ejecutamos, escribimos algunos datos y presionamos el boton menu y luego escogemos la opcion guardar como vemos en la imagen:

Si todo se efectua de forma correcta veremos la siguiente imagen con el mensaje de confirmacion:

Bien, ya hemos probado el guardar, ahora volvemos a la pestaña flow y hacemos clic derecho sobre el okcommand “okbuscar” y en el menu desplegable que aparece seleccionamos la opcion Go to Source
y nos llevara a la seccion de codigo de dicho okbutton, alli deberemos colocar lo siguiente para que la busqueda se efectue con exito:

try{

proceso_wc.proceso_wcService_Stub sw=new proceso_wcService_Stub();

String ced;

ced=String.valueOf(this.textField_cedula.getString());

boolean salida;

salida=sw.buscarUsuarioCedula(ced);

if(salida==true){

//Traigo los datos de la bd y los muestro en los campos de texto

this.textField_nombre.setString(sw.mostrarNombre());

this.textField_apellidos.setString(sw.mostrarApellido());

this.textField_direccion.setString(sw.mostrarDireccion());

this.textField_sexo.setString(sw.mostrarSexo());

this.stringItem_resultado.setText("Usuario Encontrado!");

}else{

//limpio los campos de texto si no hay coincidencia

this.textField_nombre.setString("");

this.textField_apellidos.setString("");

this.textField_direccion.setString("");

this.textField_sexo.setString("");

this.stringItem_resultado.setText("El Usuario no se encuentra en la base de datos!");

}

}

catch(Exception e){

}

Luego podemos hacerle una prueba a la aplicacion con nuestra nueva funcion, como podemos observar:

Para realizar una busqueda solo hay que Ingresar la cedula de un usuario que este registrado, luego presionar la opcion menu y escoger buscar

Si el usuario se encuentra en la base de datos apareceran todos sus datos en los campos de texto y un mensaje de notificacion indicando que el usuario fue encontrado

Bueno amigos eso es todo, espero y este post les haya gustado y haya  sido de utilidad, para descargar el proyecto hagan clic en el link de abajo.

Descargar Aplicacion

Anuncios

15 respuestas a “Consumir Web Service con J2ME

  1. Te agradezco el que compartas tu conocimiento, y te felicito por este blog, tu aplicación es sencilla, nos guia paso a paso y super completa…. gracias que he encontrado en esta.. ah y de gran utilidad …

  2. Hola buen dia,
    soy completamente nuevo en esto del mobile y estoy buscando crear exactamente lo que estas haciendo, pero ni si quiera me permite agregar el webservice, en la parte donde pones nuevo + Java ME Web Services
    no me aparese la opcion le pongo en otros y selecciono la opcion Java ME Web Services pero me aparese esta leyenda:

    This feature is not yet enabled. Press Next to activate it.
    Creates new Java ME Web Services (JSR 172) Client.

    le doy click en siguiente y me dice finding feature, y nunca me permite darle finalizar

    tengo que agregar algo o que estoy haciendo mal, mi version del netbeans es la 7.0.1 ojala pudieras ayudarme con este problema
    de antemano muchas gracias
    Saludos

    • Hola Escricop, con respescto a tu duda veo algo extraño que no logres conseguir la opcion que tiene netbeans para agregar servicios web, deberias de buscar mas a fondo entre las opciones que te aparacen para agregar nuevos elementos a tu proyecto de Java ME, yo hice la prueba en netbeans 7.1 el cual tengo instalado en una maquina virtual con ubuntu 11.10 y mira en la imagen que si aparece la opcion para agregar el webservice.

      Imagen 1 Seleccionando la Opcion del webservice:

      Seleccionando opcion de Servicio web

      Imagen 2:

      Escribiendo WSDL de Web service

      Lo que te recomiendo es que Instales otra version de netbeans para ver si te aparece la opcion especifica, espero y lo intentes. Hasta pronto…

      • Hola muchas gracias, tenia la version 6.8 y no me lo permitia, despues cambie a la 7.0.1 y si me aparesia pero no me permita crearlo, ahora instale la version 7.1.1 y ya me aparese y me permite agregarlo
        Muchisimas gracias
        Saludos

      • Hola Escricop, Me da gusto que hayas podido solucionar tu problema y que este tutorial te haya sido de ayuda.
        Estamos para servir amigo, saludos…

      • Disculpa que te moleste talves es una tonteria pero no puedo crear un arrayList en j2me,
        encontre que debo de importar import java.util.*; pero sigue sin reconocermelo, podrias ayudarme con esto ?

        ArrayList ejemplo = new ArrayList();

        Nunca me lo marca como valido
        de antemano muchas gracias

      • hola, para crear el arraylist, se hace uso de los llamados Generics, que para este caso, no es más que hacerle saber a la colección el tipo de dato que almacenará, esto por medio de poner el nombre de la clase dentro de signos menor mayor () .

        Para crear lo que necesitas, debes crear tu arrayList así:

        ArrayListarray = new ArrayList();

        Lo que estás haciendo es crear un ArrayList que almacena tipos de dato ArrayList únicamente. Para agregar ya necesitas hacer el manejo conocido:

        array.add(new ArrayList());

        Obviamente, en el primer ArrayList no podrás introducir objetos de otro tipo, sin embargo en los ArrayList de adentro puedes hacer lo que necesites, por ejemplo, si necesitas un ArrayList de ArrayList de String, sería:

        ArrayList<ArrayList> arreglo = new ArrayList();

        El único valor que podrías introducir sería específicamente ArrayList de cadenas.

        si no te funciona prueba a utilizar Vector, tal vez te ayude: (java.util.Vector)

        tal vez las siguientes paginas te sean de ayuda:

        Crear Array List

        Array List en Java

  3. Hola ingsistele, quiero felicitarte por el buen trabajo que has hecho, realmente me ha ayudado mucho y tambien quisiera hacer una pregunta.
    He probado hasta la parte de registrar y funciona( pero trabajo con el sdk por defecto)
    pero he probado con otro sdk(el de sony ericcsson sdk 2.5.0.6) y me arroja un error:

    java.lang.NoClassDefFoundError:
    proceso_wc/proceso_wcService_Stub:
    proceso_wc/proceso_wcService

    y la linea del error que señala es :
    } else if (command == okguardar) {

    Tengo Netbeans 7.1
    Jdk 6u23

    Me gustaria que me ayudaras. bueno espero tu respuesta y gracias de antemano.

    • Hola Anthony, he probado el codigo con el wireless toolkit y no me arroja ningun error, sin embargo debes de verificar las propiedades del telefono celular en el emulador, en algunas ocasiones el codigo no funciona en dispositivos cuya plataforma CLDC y MIDP corresponden a 1.0, prueba cambiando esas configuraciones en el emulador para ver si te funciona.

      • Hola Ingsistele, yo otra vez :D, mira las configuraciones del telefono del emulador son CLDC 1.1 y MIDP 2.0 y me sigue arrojando el mismo error, creo que es problema de mi jdk que no soporta al sdk de nokia(voy a probar con otro jdk mas adelante).
        Pero tengo otras inquietudes. Quisiera probar la aplicacion desde mi celular(es un nokia 3500 un poco chusco pero soporta java), me gustaria saber como hago eso, que debo cambiar, que configuraciones debo hacer, todo eso, bueno espero tu respuesta y otra vez gracias.

      • Solo debes cambiar localhost por la direccion ip:puerto del servidor donde vas a alojar el webservice y listo, eso lo vas a hacer cuando vas a agregar la wsdl en J2ME, ejemplo: http://192.168.1.1:8080/webservice

        recuerda que para poder testearlo necesitas tener wifi en tu celular y estar emparejado al router si lo vas a consumir de manera local, pero si tienes internet, debes de colocar la direccion ip publica de tu router o modem, abrir los puertos de tu modem para que acepte conexiones entrantes o habilitar el dmz para que te redireccione a una ip local cuando accedas por la ip publica. si quieres conocer la ip publica de tu modem entra a: Cual es mi Ip

        Ten encuenta que debes subir el webservice al servidor apache tomcat como te he explicado en el post de creacion de un webservice.

  4. hola compañero muy bueno tutorial pero al momento de guardar mi aplicacion me sale que si deseo consumir tiempo aire y le doy que si pero abajo me sale este mensaje no es de error solo una advertencia Advertencia: Para evitar el bloqueo potencial, las operaciones que se pueden bloquear, como por ejemplo
    redes, se debe realizar en un hilo diferente que el
    commandAction () del controlador. uso netbeans 7.1

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 )

Conectando a %s