Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Copyright 2012.
1. Introduccin
1.1. HolaMundo.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; /** Ejemplo. Como muchas aplicaciones de celular, no usa botones sino elementos de * men que se pueden desplegar de distintas formas. */ public class HolaMundo extends MIDlet{ private final Display pantalla = Display.getDisplay(this); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Hola Mundo"); { forma.addCommand(salir); // Se asigna el controlador de la forma. forma.setCommandListener(new CommandListener() { public void commandAction(Command c, Displayable d) { if (c == salir){ // seleccion salir termina(); } } }); } /** Cdigo que se ejecuta cuando el MIDlet se activa. */ protected void startApp() { pantalla.setCurrent(forma); } /** Cdigo que se ejecuta cuando el MIDlet entra en estado de pausa. */ protected void pauseApp() { } /** Cdigo que se ejecuta cuando el MIDlet es destrudo. Normalmente se liberan los * recursos ocupados por el MIDlet como memoria, etc. * @param unconditional true indica que se debe destrur forzosamente. * false indica que se puede destrur la destruccin del MIDlet lanzando la * excepcin MIDletStateChangeException.*/ protected void destroyApp(boolean unconditional){ } private void termina(){ destroyApp(false); notifyDestroyed(); } }
4
public void commandAction(Command c, Displayable d) { if (c == forma.getSalir()) { termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
} public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ // seleccion salir termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
1.4. Teletipos.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Ticker; import javax.microedition.midlet.MIDlet; /** * Ejemplo del uso de teletipos */ public class Teletipos extends MIDlet implements CommandListener { private final Display pantalla = Display.getDisplay(this); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Ticker ticker = new Ticker(Saludos desde mi Casita); private final Form formulario = new Form("Hola"); { formulario.setTicke(ticker); formulario.append("Hola Mundo"); formulario.addCommand(salir); formulario.setCommandListener(this); } public void startApp() { pantalla.setCurrent(formulario); } public void pauseApp() {
7
} public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir) { termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
10
protected void startApp() throws MIDletStateChangeException { display.setCurrent(forma); } protected void destroyApp(boolean unconditional){ } protected void pauseApp() { } public void commandAction(Command c, Displayable d) { if ( c==cmdPredefinida){ muestraPredefinida(); }else if (c == cmdModal){ muestraModal(); }else if (c == cmdNoModal){ muestraNoModal(); }else if (c == cmdSalir){ termina(); } } private void muestraPredefinida() { /* Primero muestra una Alert y al cerrarla muestra un Displayable. */ display.setCurrent(alert, forma); } private void muestraModal() { display.setCurrent(alModal, forma); } private void muestraNoModal() { display.setCurrent(alNoModal, forma); } private void termina() { destroyApp(false); notifyDestroyed(); } }
10
11
import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.*; /** Ejemplo de como usa un TextBox. Para configurar con ms detalle se pueden aplicar * los conceptos del programa TextFields. */ public class Textos extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Command cmdLimpiar = new Command("Limpiar", Command.SCREEN, 1); private final Command cmdUsar = new Command("Usar", Command.SCREEN, 1); private final TextBox texto = new TextBox("Pensamiento", "Escribe aqu un pensamiento", 300, TextField.ANY); { texto.addCommand(cmdLimpiar); texto.addCommand(cmdUsar); texto.addCommand(cmdSalir); texto.setCommandListener(this); } private final Alert alerta = new Alert("Pensamiento Ledo", "", null, AlertType.INFO); { alerta.setTimeout(Alert.FOREVER); } public void startApp() { display.setCurrent(texto); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdLimpiar) { // seleccion limpiar clicEnCmdLimpiar(); } else if (c == cmdUsar) { // seleccion usar clicEnCmdUsar(); } else if (c == cmdSalir) { // seleccion salir clicEnCmdSalir(); } } private void clicEnCmdLimpiar() { texto.setString(""); } private void clicEnCmdUsar() {
11
12
final String introducido = texto.getString(); alerta.setString(introducido); display.setCurrent(alerta, texto); } private void clicEnCmdSalir() { destroyApp(false); notifyDestroyed(); } }
12
13
}
} }
13
14
forma2.setCommandListener(this); } public void startApp() { display.setCurrent(menu); int ancho = display.getBestImageWidth(Display.LIST_ELEMENT); int altura = display.getBestImageHeight(Display.LIST_ELEMENT); menu.insert(0,"Compras", ImagenesUtil.cargaImagen("/img/compras16.png", ancho, altura)); menu.insert(1,"Productos", ImagenesUtil.cargaImagen("/img/productos16.png", ancho, altura)); menu.insert(2,"Proveedores", ImagenesUtil.cargaImagen("/img/proveedores16.png", ancho, altura)); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == List.SELECT_COMMAND || c == cmdSeleccionar){ opcionSeleccionada(); }else if (c == cmdAtras){ display.setCurrent(menu); }else if (c == cmdSalir){ termina(); } } private void opcionSeleccionada() { switch(menu.getSelectedIndex()){ case 0: muestraForma0(); break; case 1: muestraForma1(); break; case 2: muestraForma2(); break; } } private void muestraForma0() { display.setCurrent(forma0); } private void muestraForma1() { display.setCurrent(forma1); } private void muestraForma2() {
14
15
display.setCurrent(forma2); } private void termina() { destroyApp(false); notifyDestroyed(); } }
15
16
public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdContinuar){ continua(); }else if (c == cmdSalir){ termina(); } } private void continua() { final int seleccion = menu.getSelectedIndex(); alerta.setString("Seleccion: "+(seleccion + 1)); display.setCurrent(alerta, menu); } private void termina() { destroyApp(false); notifyDestroyed(); } }
16
17
menu.setCommandListener(this); } private final Alert alerta = new Alert("Selecciones", "", null, AlertType.INFO); { alerta.setTimeout(Alert.FOREVER); } public void startApp() { display.setCurrent(menu); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdContinuar){ continua(); }else if (c == cmdSalir){ termina(); } } private void continua() { boolean seleccionados[] = new boolean[menu.size()]; StringBuffer sb = new StringBuffer("Selecciones:\n"); menu.getSelectedFlags(seleccionados); for(int i=0; i < menu.size(); i++){ if (seleccionados[i]){ sb.append(" SI\n"); }else{ sb.append(" NO\n"); } alerta.setString(sb.toString()); display.setCurrent(alerta, menu); }
17
18
import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.*; /** Distintas formas de usar y configurar TextFields. Muchos de estos conceptos * tambin se aplican a TextBox. */ public class TextFields extends MIDlet implements CommandListener { Display display = Display.getDisplay(this); private final TextField txtNormal = new TextField("Normal: ", "", 70, TextField.ANY); private final TextField txtTelefono = new TextField("Telefono: ", "", 70, TextField.PHONENUMBER); private final TextField txtEmail = new TextField("Email: ", "@", 70, TextField.EMAILADDR); private final TextField txtUrl = new TextField("URL: ", "http://", 70, TextField.URL); private final TextField txtNumerico = new TextField("Numerico: ", "", 70, TextField.NUMERIC); private final TextField txtDecimal = new TextField("Decimal: ", "", 70, TextField.DECIMAL); private final TextField txtContrasea = new TextField("Contrasea: ", "", 70, TextField.PASSWORD); private final TextField txtMayusculas = new TextField("Mayusculas: ", "", 70, TextField.ANY); { txtMayusculas.setInitialInputMode("MIDP_UPPERCASE_LATIN"); } private final TextField txtMinusculas = new TextField("Minusculas: ", "", 70, TextField.ANY); { txtMinusculas.setInitialInputMode("MIDP_LOWERCASE_LATIN"); } private final Command cmdContinuar = new Command("Continuar", Command.SCREEN, 1); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Campos de Texto", new Item[] {txtNormal, txtContrasea, txtTelefono, txtEmail, txtUrl, txtNumerico, txtDecimal, txtMayusculas, txtMinusculas}); { forma.addCommand(cmdContinuar); forma.addCommand(cmdSalir); forma.setCommandListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) {
18
19
} public void commandAction(Command c, Displayable d) { if (c==cmdContinuar){ continua(); }else if ( c == cmdSalir){ termina(); }
} private void continua() { String contrasea = txtContrasea.getString(); txtNormal.setString(contrasea); txtNormal.getCaretPosition(); } private void termina() { destroyApp(false); notifyDestroyed(); } }
19
20
The range of values specified by the application may be larger than the number of distinct visual states possible on the device, so more than one value may have the same visual representation. */ private final Gauge gNivel = new Gauge("Nivel:", true, 4, 0); private final StringItem strSignificado = new StringItem("Significado:", "Congelado"); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Temperatura"); { forma.append(gNivel); forma.append(strSignificado); forma.addCommand(salir); forma.setCommandListener(this); forma.setItemStateListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir) { termina(); } } public void itemStateChanged(Item i) { if (i == gNivel) { cambioDeNivel(); } } private void cambioDeNivel() { int nivel = gNivel.getValue(); switch (nivel) { case 0: strSignificado.setText("Congelado"); break; case 1: strSignificado.setText("Frio"); break; case 2: strSignificado.setText("Templado"); break; case 3: strSignificado.setText("Caliente"); break; case 4:
20
21
strSignificado.setText("Quemndose"); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
21
22
forma.setCommandListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
22
23
private final Display display = Display.getDisplay(this); private final int altura = display.getBestImageHeight(Display.CHOICE_GROUP_ELEMENT); private final int ancho = display.getBestImageWidth(Display.CHOICE_GROUP_ELEMENT); private Image[]imagenes= { ImagenesUtil.cargaImagen("/img/compras16.png", ancho, altura), ImagenesUtil.cargaImagen("/img/productos16.png", ancho, altura), ImagenesUtil.cargaImagen("/img/proveedores16.png", ancho, altura)}; private final ChoiceGroup chcSexo= new ChoiceGroup("Sexo:",Choice.POPUP,sexo,null); private final ChoiceGroup chcConfirmar= new ChoiceGroup("Confirmar:",Choice.EXCLUSIVE,confirmar,null); private final ChoiceGroup chcPermisos= new ChoiceGroup("Permisos:",Choice.MULTIPLE,permisos,imagenes); private final Command salir = new Command("Salir",Command.EXIT, 1); private final Form forma=new Form("Ejemplo", new Item[]{chcSexo,chcConfirmar, chcPermisos}); { forma.addCommand(salir); forma.setItemStateListener(this); forma.setCommandListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ termina(); } } public void itemStateChanged(Item i) { if (i == chcSexo){ display.vibrate(3000); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
23
24
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.ImageItem; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemCommandListener; import javax.microedition.lcdui.StringItem; import javax.microedition.midlet.*; import movil.si.me.ImagenesUtil; /** * @author RICARDO ARMANDO */ public class Imagenes extends MIDlet implements CommandListener, ItemCommandListener { private final Display display =Display.getDisplay(this); private final int ancho = display.getBestImageWidth(Display.LIST_ELEMENT); private final int altura = display.getBestImageHeight(Display.LIST_ELEMENT); private Image imgUsuario = ImagenesUtil.cargaImagen("/img/usuario16.png", ancho, altura); private Image imgProveedores = ImagenesUtil.cargaImagen("/img/proveedores16.png", ancho, altura); private Command cmdAdios = new Command("Adios", Command.ITEM, 1); private ImageItem imgAdios= new ImageItem("Adios", imgProveedores, Item.LAYOUT_LEFT, "Adios", StringItem.HYPERLINK); { imgAdios.setDefaultCommand(cmdAdios); imgAdios.setItemCommandListener(this); } private ImageItem imgCentro = new ImageItem(null, imgUsuario, ImageItem.LAYOUT_NEWLINE_BEFORE |ImageItem.LAYOUT_CENTER ImageItem.LAYOUT_NEWLINE_AFTER, "Proveedores"); private ImageItem imgIzquierda = new ImageItem(null, imgUsuario, ImageItem.LAYOUT_NEWLINE_BEFORE |ImageItem.LAYOUT_DEFAULT ImageItem.LAYOUT_NEWLINE_AFTER, "Proveedores"); private ImageItem imgDerecho = new ImageItem(null, imgUsuario, ImageItem.LAYOUT_NEWLINE_BEFORE |ImageItem.LAYOUT_RIGHT ImageItem.LAYOUT_NEWLINE_AFTER, "Proveedores");
private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form formulario = new Form("Ejemplo", new Item[]{imgAdios, imgIzquierda, imgCentro, imgDerecho});
24
25
{ formulario.addCommand(salir); formulario.setCommandListener(this); } public void startApp() { display.setCurrent(formulario); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ termina(); } } public void commandAction(Command c, Item item) { if (c == cmdAdios){ termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
25
26
setTitle("Hola"); addCommand(cmdSalir); setCommandListener(oyente); } public Command getCmdSalir() { return cmdSalir; } // Para poder hacer tus propios dibujos o componentes protected void paint(Graphics g) { int x = getWidth()/2; int y = getHeight()/2; int colocacion = Graphics.BASELINE | Graphics.HCENTER; g.setColor(255, 255, 255);//Blanco g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0, 0, 0); g.drawString("Hola Mundo", x, y, colocacion); } }
2.11.2. Midlet.
package bajo.nivel; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class BajoHola extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final CanvasHola canvas = new CanvasHola(this); public void startApp() { display.setCurrent(canvas); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == canvas.getCmdSalir()){ termina(); } } private void termina() {
26
27
destroyApp(false); notifyDestroyed(); } }
27
28
case Canvas.LEFT: if (x > 0){ x -= dx; } break; case Canvas.UP: if (y > 0){ y -= dy; } break; case Canvas.RIGHT: if ((x + 2 * dy) < getWidth()){ x += dx; } break; } this.repaint(); } }
2.12.2. Midlet.
package bajo.nivel; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class MoverImagen extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final CanvasImagen canvas CanvasImagen(display.getBestImageWidth(Display.LIST_ELEMENT), display.getBestImageHeight(Display.LIST_ELEMENT), this); public void startApp() { display.setCurrent(canvas); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == canvas.getCmdSalir()){
new
28
29
termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }
29
30
30
31
1. Endidad ContactoMe.
import java.util.Date; public class ContactoMe { private int id; private String nombre=""; private String telefono=""; private Date nacimiento; public void setId(int id) { this.id = id; } public int getId() { return id; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setTelefono(String telefono) { this.telefono = telefono; } public String getTelefono() { return telefono; } public void setNacimiento(Date nacimiento) { this.nacimiento = nacimiento; } public Date getNacimiento() { return nacimiento; } }
2. InfoContactoRs.
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import java.util.Vector; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore;
31
32
import javax.microedition.rms.RecordStoreException;
/* RecordEnumeration An interface representing a bidirectional record store Record enumerator. The RecordEnumeration logically maintains a sequence of the recordId's of the records in a record store. The enumerator will iterate over all (or a subset, if an optional record filter has been supplied) of the records in an order determined by an optional record comparator. RecordStore A class representing a record store. A record store consists of a collection of records which will remain persistent across multiple invocations of the MIDlet. The platform is responsible for making its best effort to maintain the integrity of the MIDlet's record stores throughout the normal use of the platform, including reboots, battery changes, etc. * RecordStoreException * Thrown to indicate a general exception occurred in a record store operation. */ public class InfoContactoRs { public Vector todos(RecordStore rs) throws RecordStoreException, IOException{ Vector lista = new Vector(rs.getNumRecords()); // rs.enumerateRecords Returns an enumeration for traversing a set of records in the record store in an optionally //specified order. RecordEnumeration re = rs.enumerateRecords(null, null, false); while(re.hasNextElement()){ //Returns the recordId of the next record in this enumeration, where next is defined by the comparator //and/or filter supplied in the constructor of this enumerator. After calling this method, the enumeration is //advanced to the next available record int id = re.nextRecordId(); String idNombre = leeIdNombre(rs, id); lista.addElement(idNombre); } return lista; } public String leeIdNombre(RecordStore rs, int id) throws RecordStoreException, IOException{ //Returns a copy of the data stored in the given record byte[] buffer = rs.getRecord(id); //A ByteArrayInputStream contains an internal buffer that contains bytes that may be read from the stream.
32
33
//An internal counter keeps track of the next byte to be supplied by the read method. ByteArrayInputStream bais = new ByteArrayInputStream(buffer); //A data input stream lets an application read primitive Java data types from an underlying input stream //in a machine-independent way. An application uses a data output stream to write data that can later be read by a data input stream. DataInputStream dis = new DataInputStream(bais); //Bytes for this operation are read from the contained input stream String nombre = dis.readUTF(); return id + "-" + nombre; } /* */ public int agrega(RecordStore rs, ContactoMe objeto) throws RecordStoreException, IOException{ byte[]record = guarda(objeto); return rs.addRecord(record, 0, record.length); } private byte[] guarda(ContactoMe objeto) throws IOException{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(objeto.getNombre()); dos.writeUTF(objeto.getTelefono()); dos.writeLong(objeto.getNacimiento().getTime()); dos.flush(); return baos.toByteArray(); } public ContactoMe busca(RecordStore rs, int id) throws RecordStoreException, IOException{ RecordEnumeration re = rs.enumerateRecords(null, null, false); while(re.hasNextElement()){ if (id == re.nextRecordId()){ ContactoMe objeto = leeObjeto(rs, id); return objeto; } } return null; } public ContactoMe leeObjeto(RecordStore rs, int id) throws RecordStoreException, IOException{ byte[] buffer = rs.getRecord(id); ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
33
34
DataInputStream dis = new DataInputStream(bais); ContactoMe objeto = new ContactoMe(); objeto.setId(id); objeto.setNombre(dis.readUTF()); objeto.setTelefono(dis.readUTF()); objeto.setNacimiento(new Date(dis.readLong())); return objeto; } public void modifica(RecordStore rs, ContactoMe objeto) throws RecordStoreException, IOException{ byte [] record = guarda(objeto); /* * Sets the data in the given record to that passed in. After this method returns, a call to getRecord(int recordId) will return an array of numBytes size containing the data supplied here. Parameters: recordId - the ID of the record to use in this operation newData - the new data to store in the record offset - the index into the data buffer of the first relevant byte for this record numBytes - the number of bytes of the data buffer to use for this record */ rs.setRecord(objeto.getId(), record, 0, record.length); } public void elimina(RecordStore rs, int id) throws RecordStoreException{ rs.deleteRecord(id); } }
34
35
4. Agregar.
4.1. FrmContactoNuevo.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; /** * El Form es como una ventana o forma que tu colocas en el display * @author RICARDO ARMANDO */ public class FrmContactoNuevo extends Form { public static final Command CMD_SALIR = new Command("Salir", Command.EXIT, 1); public static final Command CMD_GUARDAR = new Command("Guardar", Command.SCREEN, 1); private final TextField nombre = new TextField("Nombre:", "", 30, TextField.ANY); private final TextField telefono = new TextField("Telefono:", "", 15, TextField.PHONENUMBER); private final DateField nacimiento = new DateField("Nacimiento:", DateField.DATE); public FrmContactoNuevo(CommandListener oyente) { super("Nuevo Contacto"); append(nombre); append(telefono); append(nacimiento); addCommand(CMD_SALIR); addCommand(CMD_GUARDAR); setCommandListener(oyente); } public TextField getNombre() { return nombre; } public TextField getTelefono() { return telefono; } public DateField getNacimiento() { return nacimiento; } }
4.2. CtrlContactoNuevo.
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*;
35
36
import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException;
public class CtrlContactoNuevo extends MIDlet implements CommandListener { Display display = Display.getDisplay(this); private final FrmContactoNuevo forma = new FrmContactoNuevo(this); private final InfoContactoRs info = new InfoContactoRs(); private final Alert alert = new Alert("Error"); public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmContactoNuevo.CMD_GUARDAR){ guarda(); }else if (c == FrmContactoNuevo.CMD_SALIR){ termina(); } } private void guarda() { RecordStore rs = null; try { ContactoMe objeto = lee(); rs = RecordStore.openRecordStore(RsMers.PRUEBA, true); info.agrega(rs, objeto); muestraMensaje("Agregado."); } catch (Exception ex) { muestraError(ex); }finally{ if (rs !=null){ try { rs.closeRecordStore(); } catch (RecordStoreException ex) { muestraError(ex); }
36
37
objeto.setNombre(forma.getNombre().getString().trim()); objeto.setTelefono(forma.getTelefono().getString().trim()); objeto.setNacimiento(forma.getNacimiento().getDate()); return objeto; } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error"); alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } private void muestraMensaje(String texto) { alert.setTitle("Informacin"); alert.setType(AlertType.INFO); alert.setString(texto); display.setCurrent(alert, forma); } }
5. Listados.
5.1. FrmTodos.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.List; /** * @author RICARDO ARMANDO */ public class FrmTodos extends List { public static final Command CMDSALIR = new Command("Salir", Command.EXIT, 1); public FrmTodos(CommandListener oyente) { super("Contactos", IMPLICIT); addCommand(CMDSALIR); setCommandListener(oyente); } }
37
38
5.2. CtrlContactos.
import java.util.Enumeration; import java.util.Vector; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; /** * @author RICARDO ARMANDO */ public class CtrlContactos extends MIDlet implements CommandListener { private Display display = Display.getDisplay(this); private final FrmTodos forma = new FrmTodos(this); private final InfoContactoRs info = new InfoContactoRs(); /* An alert is a screen that shows data to the user and waits for a certain period of time before proceeding to the next Displayable.An alert can contain a text string and an image. The intended use of Alert is to inform the user about errors and other exceptional conditions. */ private final Alert alert = new Alert("Error"); public void startApp() { /* Requests that a different Displayable object be made visible on the display. The change will typically not take effect immediately.*/ display.setCurrent(forma); busca(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmTodos.CMDSALIR){ termina(); } } private void busca() { RecordStore rs = null; try { rs = abre(); Vector idNombres = info.todos(rs); for (Enumeration en = idNombres.elements(); en.hasMoreElements(); ) { String idNombre = en.nextElement().toString();
38
39
forma.append(idNombre.toString(), null); } } catch (Exception ex) { muestraError(ex); }finally{ cierra(rs); } } private RecordStore abre()throws RecordStoreException { return RecordStore.openRecordStore(RsMers.PRUEBA, true); } private void cierra(RecordStore rs) { if (rs != null){ try { rs.closeRecordStore(); } catch (Exception ex) { muestraError(ex); } } } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error"); alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } }
6. Modificar.
6.1. FrmContactoEditar.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; /**
39
40
* @author RICARDO ARMANDO */ public class FrmContactoEditar extends Form { public static final Command SALIR = new Command("Salir", Command.EXIT, 1); public static final Command CMD_BUSCAR = new Command("Buscar", Command.SCREEN, 1); public static final Command CMD_GUARDAR = new Command("Guardar",Command.SCREEN, 1); private final TextField clave = new TextField("Clave:", "", 30, TextField.NUMERIC); private final TextField nombre = new TextField("Nombre:", "", 30, TextField.ANY); private final TextField telefono = new TextField("Telefono:", "", 15, TextField.PHONENUMBER); private final DateField nacimiento = new DateField("Nacimiento:", DateField.DATE); public FrmContactoEditar(CommandListener oyente) { super("Editar Contacto"); append(clave); append(nombre); append(telefono); append(nacimiento); addCommand(SALIR); addCommand(CMD_BUSCAR); addCommand(CMD_GUARDAR); setCommandListener(oyente); } public TextField getNombre() { return nombre; } public TextField getTelefono() { return telefono; } public DateField getNacimiento() { return nacimiento; } public TextField getClave() { return clave; } }
6.2. CtrlContactoEditar.
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; import javax.microedition.rms.RecordStore;
40
41
import javax.microedition.rms.RecordStoreException; /** * @author RICARDO ARMANDO */ public class CtrlContactoEditar extends MIDlet implements CommandListener { private Display display = Display.getDisplay(this); private ContactoMe objeto; private final FrmContactoEditar forma = new FrmContactoEditar(this); private final InfoContactoRs info = new InfoContactoRs(); private final Alert alert = new Alert("Error"); public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmContactoEditar.CMD_BUSCAR ){ busca(); }else if (c == FrmContactoEditar.CMD_GUARDAR){ guarda(); }else if (c == FrmContactoEditar.SALIR){ termina(); } } private void busca() { RecordStore rs = null; try { int id = leeId(); rs = abre(); objeto = info.busca(rs, id); muestra(); } catch (Exception ex) { muestraError(ex); }finally { cierra(rs); } } private int leeId() { String txtId = forma.getClave().getString(); return Integer.parseInt(txtId); } private void muestra() { forma.getNombre().setString(objeto.getNombre()); forma.getTelefono().setString(objeto.getTelefono());
41
42
forma.getNacimiento().setDate(objeto.getNacimiento()); } private void guarda() { RecordStore rs = null; try { lee(); rs = abre(); info.modifica(rs, objeto); muestraMensaje("Guardado."); } catch (Exception ex) { muestraError(ex); }finally { cierra(rs); } } private void lee() { objeto.setNombre(forma.getNombre().getString().trim()); objeto.setTelefono(forma.getTelefono().getString().trim()); objeto.setNacimiento(forma.getNacimiento().getDate()); } private RecordStore abre() throws RecordStoreException { return RecordStore.openRecordStore(RsMers.PRUEBA, true); } private void cierra(RecordStore rs) { if (rs != null){ try { rs.closeRecordStore(); } catch (RecordStoreException ex) { muestraError(ex); } } } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error"); alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } private void muestraMensaje(String texto) {
42
43
alert.setTitle("Informacin"); alert.setType(AlertType.INFO); alert.setString(texto); display.setCurrent(alert, forma); } }
7. Eliminar.
7.1. FrmContactoEliminar.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; /** * El Form es como una ventana o forma que tu colocas en el display * @author RICARDO ARMANDO */ public class FrmContactoEliminar extends Form { public static final Command CMD_SALIR = new Command("Salir", Command.EXIT, 1); public static final Command CMD_BUSCAR = new Command("Buscar", Command.SCREEN, 1); public static final Command CMD_ELIMINAR = new Command("Eliminar", Command.SCREEN, 1); private final TextField clave = new TextField("Clave:", "", 30, TextField.NUMERIC); private final StringItem nombre = new StringItem("Nombre:", ""); private final StringItem telefono = new StringItem("Telefono:", ""); private final StringItem nacimiento = new StringItem("Nacimiento:", ""); public FrmContactoEliminar(CommandListener oyente) { super("Eliminar Contacto"); append(clave); append(nombre); append(telefono); append(nacimiento); addCommand(CMD_SALIR); addCommand(CMD_BUSCAR); addCommand(CMD_ELIMINAR); setCommandListener(oyente); } public StringItem getNombre() { return nombre; } public StringItem getTelefono() { return telefono; }
43
44
public StringItem getNacimiento() { return nacimiento; } public TextField getClave() { return clave; } }
7.2. CtrlContactoEliminar.
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; /** * @author RICARDO ARMANDO */ public class CtrlContactoEliminar extends MIDlet implements CommandListener { private Display display = Display.getDisplay(this); private ContactoMe objeto; private final FrmContactoEliminar forma = new FrmContactoEliminar(this); private final InfoContactoRs info = new InfoContactoRs(); private final Alert alert = new Alert("Error"); public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmContactoEliminar.CMD_BUSCAR) { busca(); } else if (c == FrmContactoEliminar.CMD_ELIMINAR) { elimina(); } else if (c == FrmContactoEliminar.CMD_SALIR) { termina(); } } private void busca() { RecordStore rs = null;
44
45
try { int id = leeId(); rs = abre(); objeto = info.busca(rs, id); muestra(); } catch (Exception ex) { muestraError(ex); } finally { cierra(rs); } } private int leeId() { String txtId = forma.getClave().getString(); return Integer.parseInt(txtId); } private void muestra() { forma.getNombre().setText(objeto.getNombre()); forma.getTelefono().setText(objeto.getTelefono()); forma.getNacimiento().setText(objeto.getNacimiento().toString()); } private void elimina() { RecordStore rs = null; try { rs = abre(); info.elimina(rs, objeto.getId()); muestraMensaje("Eliminado"); } catch (Exception ex) { cierra(rs); } } private RecordStore abre() throws RecordStoreException { return RecordStore.openRecordStore(RsMers.PRUEBA, true); } private void cierra(RecordStore rs) { if (rs != null){ try { rs.closeRecordStore(); } catch (RecordStoreException ex) { muestraError(ex); } } } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error");
45
46
alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } private void muestraMensaje(String texto) { alert.setTitle("Infromacin"); alert.setType(AlertType.INFO); alert.setString(texto); display.setCurrent(alert, forma); } }
46
47
47
48
48
49
try { c = (HttpConnection) Connector.open(URL + "?nombre=" + texto.getString()); c.setRequestMethod(HttpConnection.GET); c.setRequestProperty("Accept", "text/plain"); /* Al momento de obtener la longitud de la respuesta o el InputStream, se enva * la solicitud y se leen los encabezados de la respuesta, los cuales se guardan * hasta que se solicitan. */ long longResp = c.getLength(); dis = c.openDataInputStream(); int e = 0; String valor; mensaje("RESPUESTA. "); mensaje("Longitud: " + longResp); mensaje("Encabezados: "); while ((valor = c.getHeaderField(e)) != null) { mensaje(c.getHeaderFieldKey(e) + ' ' + valor); e++; } mensaje("Cdigo: " + c.getResponseCode()); mensaje("Texto: " + c.getResponseMessage()); String respuesta = dis.readUTF(); mensaje("Contenido: " + respuesta); } catch (ClassCastException ex) { mensaje(URL + "no es una URL de HTTP"); } catch (Exception ex) { error(ex); } finally { if (dis != null) { try { dis.close(); } catch (IOException ex) { error(ex); } } if (c != null){ try { c.close(); } catch (IOException ex) { error(ex); } } } } private void limpia() { texto.setString(""); } private void termina() {
49
50
destroyApp(false); notifyDestroyed(); } private void mensaje(final String txt) { texto.insert("\n" + txt, texto.size()); } private void error(Exception ex) { mensaje(ex.getMessage()); ex.printStackTrace(); } }
2. ServicioSaludoJava. En el servidor web. /* Hay que crear un proyecto WEB con un servlet llamado ServicioSaludoJava */
import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServicioSaludoJava extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String nombre = request.getParameter("nombre"); String saludo = "Hola "+nombre; DataOutputStream dos = new DataOutputStream(response.getOutputStream()); try{ dos.writeUTF(saludo); }finally{ dos.flush(); } } @Override public String getServletInfo() { return "Responde con un saludo DataOutputStream. Versin 1.0." + Copyright 2011. M. en C. RICARDO ARMANDO MACHORRO REYES; } }
50