Ir al contenido principal

1. Empezando con J2ME



1. INTRODUCCIÓN


El código de a continuación sera una pantalla de autenticación de usuario (Login) el cual nos dara como resultado dos respuestas:
  1. Pantalla de bienvenida por que el usuario si existe
  2. Pantalla de error por que el usuario no existe
Este ejemplo tendrá 3 pantallas y nos permitirá explicar un poco sobre el posicionamiento de las pantallas a solicitud del usuario; así como su gestión entre las mismas. Ademas veremos como usar los Item y Command a solicitud del usuario.
REFERENCIAR A UN POST DE COMPONENTES GRAFICOS EN J2ME




2. DESARROLLO


Creamos una nueva aplicación móvil en NetBeans (sino sabe como crear una nueva aplicación móvil puede ver el siguiente post Crear aplicación móvil J2ME desde cero con NetBeans

Definimos tres pantallas (Form).

    //pantallas
    private Form formLogin;
    private Form formLoginOk;
    private Form formLoginError;


Definimos las dos cajas de texto a crear en la pantalla de Login y un StringItem que sera el mensaje a mostrar en el caso el usuario sea correcto o incorrecto.

    //controles de pantalla
    private TextField txtUsuario;
    private TextField txtClave;
    private StringItem strMensaje;


Definimos los comandos o acciones a realizar sobre las pantallas (Command).

    //comandos
    private Command cmdEntrar;
    private Command cmdSalir;
    private Command cmdAtras;


Definimos un método mostrarPantalla(Displayable nextDisplay), este nos recibe como parámetro la siguiente pantalla a mostrarse.

Ya hemos explicado que el DISPLAY es quien controla el posicionamiento de las pantallas actuales, mediante su método setCurrent.

    public void mostrarPantalla(Displayable nextDisplay) {
        DISPLAY.setCurrent(nextDisplay);
    }    


Definimos un método validarUsuario donde validamos los datos ingresados en las cajas de texto (TextField) contra unos datos en duro. En otros post lo validaremos con datos recuperados de un repositorio de datos (Base de datos, RecordStore, etc.)

    //logica de validacion contra un usuario en duro
    public boolean validarUsuario() {
        
        String codigo = txtUsuario.getString();
        String clave = txtClave.getString();
        
        if (codigo.equals("hvasquez") && clave.equals("1234")) {
            return true;
        } 
        
        return false;
    }


Dentro del CommandAction se tendrá la siguiente validación para indicarle a la aplicación que pantalla mostrar, previamente habiendo validado el  usuario.

                boolean existeUser = this.validarUsuario();
                
                if (existeUser) {                
                    this.mostrarPantalla(construirPantallaLoginOk());                    
                } else {
                    this.mostrarPantalla(construirPantallaLoginError());
                }


Los métodos construiPantallaXYZ, lo único que hacen es construir el objeto Form (new) y hacer append para agregar los Items a la pantalla, asimismo los addComand para agregar las acciones a la pantalla PONER LINK HACIA UN POS ANTERIOR DE ITEMS


CÓDIGO FUENTE


package edu.blogpm.midlets;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 * @author SIEHP1
 */
public class MidLogin extends MIDlet implements CommandListener {

    //recuperamos el objeto Display
    public final Display DISPLAY = Display.getDisplay(this);
    //pantallas
    private Form formLogin;
    private Form formLoginOk;
    private Form formLoginError;
    //controles de pantalla
    private TextField txtUsuario;
    private TextField txtClave;
    private StringItem strMensaje;
    //comandos
    private Command cmdEntrar;
    private Command cmdSalir;
    private Command cmdAtras;

    public MidLogin() {
    }

    public void startApp() {
        System.out.println("Midlet Iniciado");        
        this.mostrarPantalla(this.construyePantallaLogin());        
    }

    public void pauseApp() {
        System.out.println("Midlet Pausado");
    }

    public void destroyApp(boolean unconditional) {
        System.out.println("Midlet Destruido");
    }

    public void commandAction(Command c, Displayable s) {        
        
        if (s == formLogin) {
            
            if (c == cmdEntrar) {
                
                boolean existeUser = this.validarUsuario();
                
                if (existeUser) {                
                    this.mostrarPantalla(construirPantallaLoginOk());                    
                } else {
                    this.mostrarPantalla(construirPantallaLoginError());
                }
                
                
            } else if (c == cmdSalir) {
                destroyApp(false);
                notifyDestroyed();
            }
            
        } else if (s == formLoginOk) {
            
            if (c == cmdAtras) {
                this.mostrarPantalla(construyePantallaLogin());

            }
            
        } else if (s == formLoginError) {
            
            if (c == cmdAtras) {
                this.mostrarPantalla(construyePantallaLogin());
            }
            
        }

    }

    public Form construyePantallaLogin() {

        if (formLogin == null) {

            formLogin = new Form("Autenticar");

            txtUsuario = new TextField("Usuario", null, 10, TextField.ANY);
            txtClave = new TextField("Clave", null, 10, TextField.NUMERIC | TextField.PASSWORD);

            cmdEntrar = new Command("Entrar", Command.OK, 1);
            cmdSalir = new Command("Salir", Command.EXIT, 2);

            formLogin.setCommandListener(this);
            formLogin.append(txtUsuario);
            formLogin.append(txtClave);            
            formLogin.addCommand(cmdEntrar);
            formLogin.addCommand(cmdSalir);           

            //DISPLAY.setCurrentItem(txtClave);
        }

        return formLogin;
    }

    public Form construirPantallaLoginOk() {

        if (formLoginOk == null) {

            formLoginOk = new Form("Ok");
            cmdAtras = new Command("Atras", Command.BACK, 1);

            String usuario = txtUsuario.getString();
            strMensaje = new StringItem("Bienvenido", usuario);

            formLoginOk.setCommandListener(this);
            formLoginOk.append(strMensaje);
            formLoginOk.addCommand(cmdAtras);
        }

        return formLoginOk;
    }

    public Form construirPantallaLoginError() {

        if (formLoginError == null) {

            formLoginError = new Form("Error");
            cmdAtras = new Command("Atras", Command.BACK, 1);

            String usuario = txtUsuario.getString();
            strMensaje = new StringItem("No existe el usuario", usuario);

            formLoginError.setCommandListener(this);
            formLoginError.append(strMensaje);
            formLoginError.addCommand(cmdAtras);
        }

        return formLoginError;
    }

    public void mostrarPantalla(Displayable nextDisplay) {
        DISPLAY.setCurrent(nextDisplay);
    }
    
    //logica de validacion contra un usuario en duro
    public boolean validarUsuario() {
        
        String codigo = txtUsuario.getString();
        String clave = txtClave.getString();
        
        if (codigo.equals("hvasquez") && clave.equals("1234")) {
            return true;
        } 
        
        return false;
    }
}


3. APLICACIÓN


Este ejemplo nos dará dos posibles resultados el Login OK  o el Login ERRO y ambas pantallas me permiten ir hacia atrás, es decir a la pantalla del Login.





<- more ->

Comentarios

Entradas populares de este blog

Estructura y distribución del IDE Eclipse (ADT)

Entenderemos como esta estructurado y organizado eclipse (ADT es una distribución de eclipse), y asi no complicarnos en nuestro desarrollo en saber donde encontrar algo, dado que muchos desarrolladores quizá es su primera experiencia con eclipse. Esta explicación aplica para cualquier IDE Eclipse dado que todos se rigen bajo el mismo paradigma. Desarrollo 1. Workspace, eclipse trabaja los proyectos dentro de un Workspace (espacio de trabajo) que es la ruta de una carpeta física en disco sale para escoger la ruta al abrir el eclipse, recomiendo no enrutar a una carpeta que este en una memoria USB porque a veces se corrompe y es lento compilando 2. Estructura del IDE , tiene 4 regiones importantes ubicadas en la forma como se muestra la imagen, ademas hay otras dos secciones encerradas de color Rojo una ya conocida como menus y herramientas y la otra como perspectivas <1> Es la vista de proyectos, los puedes ver agrupados como proyecto, como estructura de carpetas, etc.

Crear aplicación móvil J2ME desde cero con NetBeans

Todos los ejemplos hechos en este blog son para emuladores o dispositivos que soporten configuración CLCD-1.1 y perfil MIDP-2.0 hacia adelante y los ejemplos serán desarrollados en el IDE Netbeans. 1. INTRODUCCIÓN Veremos como crear una aplicación móvil J2ME en NetBeans, esto sera indiferente de la versión NetBeans que estes usando; el proceso es similar en todas las versiones (6.x, 7.x, etc.). Aprenderemos a crear proyectos, paquetes, Midlets y clases.

APK, Proceso de empaquetado y desempaquetado (compilación e instalación de un APK en un dispositivo Android)

El archivo ejecutable o paquete de instalación de una aplicación Android tiene una extensión . APK , esta es un empaquetado (conjunto de archivos compilados y recursos dentro de un espacio de nombre o paquete) que se crea cuando compilamos un proyecto Android. Asimismo cuando este .APK se instala en un dispositivo Android; lo que hace el sistema operativo Android es desempaquetar este . APK y crear una estructura con ese nombre de espacio o paquete; este es creado dentro de su directorio de aplicaciones en el sistema de archivos del dispositivo. Notas Adicionales - Por eso el nombre del Package Name de una aplicación debe ser único, haciendo la comparación con una estructura de carpetas no podemos tener 2 nombres de carpetas iguales en una ruta X. - Para los que no recuerdan cual es el package name de su proyecto este es creado al inicio del proyecto, pero también lo pueden encontrar en el Manifest.xml