style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Agenda telefónica, Proyecto Móvil

Agenda telefónica, Proyecto Móvil

En Java Zone, iniciamos nuestro primer proyecto movil, una agenda telefonica, por esto en el dia de hoy les traigo lo que hasta el momento hemos logrado. Escuchamos cualquier recomendacion, funcion adicional o lo que quieran recomendar.

Codigo

Clase Principal

package clases;

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

public class Principal extends MIDlet {

        Display pantalla;
        ListaContactos lc;

        public Principal() {
                pantalla = Display.getDisplay(this);
                lc=new ListaContactos(this);
        }

        public void startApp() {
                pantalla.setCurrent(lc);
        }

        public void pauseApp() {
        }

        public void destroyApp(boolean x) {
        }
}

Clase ListaContactos

package clases;

import java.util.Vector;

import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.lcdui.*;

public class ListaContactos extends Form implements CommandListener, ItemStateListener {

        Command salir, Nuevo;
        Principal p;
        Vector contacts=new Vector();

        public ListaContactos(Principal midlet) {
                super("Agenda");
                p = midlet;
                salir = new Command("Salir", Command.EXIT, 0);
                Nuevo = new Command("Nuevo", Command.OK, 1);
                contactosPorDefecto();
                listarContactos();
                addCommand(salir);
                addCommand(Nuevo);
                setCommandListener(this);
                setItemStateListener(this);
        }

        public void contactosPorDefecto() {
                RMSOperaciones rms=new RMSOperaciones();
                rms.abrirZona("AgendaTelefonica");
                Contacto c=rms.listarRegistro(2);
                if(c==null){
                        Contacto c1=new Contacto("Java1", "Zone1", "123456");
                        Contacto c2=new Contacto("Java2", "Zone2", "123456");
                        rms.adicionarRegistro(-1,c1);
                        rms.adicionarRegistro(-1,c2);
                        rms.cerrarZona();
                }else{
                        rms.cerrarZona();
                }
        }
       
        public void listarContactos(){
                this.deleteAll();
                RMSOperaciones rms=new RMSOperaciones();
                rms.abrirZona("AgendaTelefonica");
                contacts.removeAllElements();
                for(int i=1;i<rms.numeroDeRegistros()+1;i++){
                        Contacto c=rms.listarRegistro(i);
                        if(c!=null){
                                contacts.addElement(c);
                                JZChoiceGroup cgcontactos=new JZChoiceGroup(i,c.getNombre()+" "+c.getApellido());
                                cgcontactos.append("Actualizar", null);
                                cgcontactos.append("Eliminar", null);
                                cgcontactos.append("Detalles", null);
                                cgcontactos.append("Llamar", null);
                                cgcontactos.append("Enviar SMS", null);
                                append(cgcontactos);
                        }
                }
        }

        public void commandAction(Command c, Displayable arg1) {
                if (c == salir) {
                        p.destroyApp(true);
                        p.notifyDestroyed();
                } else {
                        if (c == Nuevo) {
                                FormaNuevo fn=new FormaNuevo(p,this);
                                p.pantalla.setCurrent(fn);
                        }
                }
        }

        public void itemStateChanged(Item item) {
                JZChoiceGroup cgp = (JZChoiceGroup) item;
                switch (cgp.getSelectedIndex()) {
                case 0:
                        FormaActualizar fa=new FormaActualizar(p, this, (Contacto)contacts.elementAt(cgp.getIndice()-1));
                        p.pantalla.setCurrent(fa);
                        break;
                case 1:
                        RMSOperaciones rmso=new RMSOperaciones();
                        rmso.abrirZona("AgendaTelefonica");
                        rmso.eliminarContactos(cgp.getIndice());
                        rmso.cerrarZona();
                        listarContactos();
                        break;
                case 2:
                        FormaDetalle fd=new FormaDetalle(p, this,((Contacto)contacts.elementAt(cgp.getIndice()-1)));
                        p.pantalla.setCurrent(fd);
                        break;
                case 3:
                        try {
                                p.platformRequest("tel:"+((Contacto)contacts.elementAt(cgp.getSelectedIndex()-1)).getTelefono());
                        } catch (ConnectionNotFoundException e) {
                                e.printStackTrace();
                        }
                        break;
                case 4:
                        FormaSMS fsms=new FormaSMS(((Contacto)contacts.elementAt(cgp.getIndice()-1)).getTelefono());
                        p.pantalla.setCurrent(fsms);
                        break;
                }
        }
}

Clase FormaNuevo

package clases;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.lcdui.*;

public class FormaNuevo extends Form implements CommandListener {

        Command guardar, atras;
        TextField txtnombre, txtapellido, txttelefono;
        Principal midlet;
        Alert alerta;
        ListaContactos lc;

        public FormaNuevo(Principal mid, ListaContactos lcont) {
                super("Registro");
                midlet = mid;
                lc=lcont;
                txtnombre = new TextField("Nombre:", "", 40, TextField.ANY);
                txtapellido = new TextField("Apellido:", "", 40, TextField.ANY);
                txttelefono = new TextField("Telefono:", "", 40, TextField.NUMERIC);
                atras = new Command("Atras", Command.EXIT, 1);
                guardar = new Command("Guardar", Command.OK, 2);
                append(txtnombre);
                append(txtapellido);
                append(txttelefono);
                addCommand(guardar);
                addCommand(atras);
                setCommandListener(this);
        }

        public void commandAction(Command c, Displayable d) {
                if (c == atras) {
                        midlet.pantalla.setCurrent(lc);
                        lc.listarContactos();
                } else {
                        if (c == guardar) {
                                RMSOperaciones rmso = new RMSOperaciones();
                                rmso.abrirZona("AgendaTelefonica");
                                Contacto contacto=new Contacto(txtnombre.getString(), txtapellido.getString(), txttelefono.getString());
                                rmso.adicionarRegistro(-1,contacto);
                                rmso.cerrarZona();
                                alerta = new Alert("Mensaje", "Se ha guardado exitosamente",
                                                null, AlertType.CONFIRMATION);
                                alerta.setTimeout(1000);
                                midlet.pantalla.setCurrent(alerta, this);
                                txtnombre.setString("");
                                txtapellido.setString("");
                                txttelefono.setString("");
                        }
                }
        }
}

Clase FormaActualizar

package clases;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.lcdui.*;

public class FormaActualizar extends Form implements CommandListener {

        Command actualizar, atras;
        TextField txtnombre, txtapellido, txttelefono;
        Principal midlet;
        Alert alerta;
        ListaContactos lc;
        Contacto contacto;

        public FormaActualizar(Principal mid, ListaContactos lcont, Contacto contacto) {
                super("Registro");
                midlet = mid;
                lc=lcont;
                this.contacto=contacto;
                txtnombre = new TextField("Nombre:", ""+contacto.getNombre(), 40, TextField.ANY);
                txtapellido = new TextField("Apellido:", ""+contacto.getApellido(), 40, TextField.ANY);
                txttelefono = new TextField("Telefono:", ""+contacto.getTelefono(), 40, TextField.NUMERIC);
                atras = new Command("Atras", Command.EXIT, 1);
                actualizar = new Command("Actualizar", Command.OK, 2);
                append(txtnombre);
                append(txtapellido);
                append(txttelefono);
                addCommand(actualizar);
                addCommand(atras);
                setCommandListener(this);
        }

        public void commandAction(Command c, Displayable d) {
                if (c == atras) {
                        midlet.pantalla.setCurrent(lc);
                        lc.listarContactos();
                } else {
                        if (c == actualizar) {
                                RMSOperaciones rmso = new RMSOperaciones();
                                rmso.abrirZona("AgendaTelefonica");
                                Contacto contactu=new Contacto(txtnombre.getString(), txtapellido.getString(), txttelefono.getString());
                                if(rmso.actualizarRegistro(contacto,contactu)){
                                        alerta = new Alert("Mensaje", "Se ha actualizo exitosamente",
                                                        null, AlertType.CONFIRMATION);
                                        alerta.setTimeout(1000);
                                        midlet.pantalla.setCurrent(alerta, this);
                                        txtnombre.setString("");
                                        txtapellido.setString("");
                                        txttelefono.setString("");
                                }else{
                                        alerta = new Alert("Error", "No se pudo actualizar el registro",
                                                        null, AlertType.CONFIRMATION);
                                        alerta.setTimeout(1000);
                                        midlet.pantalla.setCurrent(alerta, this);
                                }
                                rmso.cerrarZona();
                        }
                }
        }
}

Clase FormaDetalle

package clases;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.lcdui.*;

public class FormaDetalle extends Form implements CommandListener {

        Command atras;
        StringItem txtnombre, txtapellido, txttelefono;
        Principal midlet;
        Alert alerta;
        ListaContactos lc;

        public FormaDetalle(Principal mid, ListaContactos lcont, Contacto contacto) {
                super("Detalle");
                midlet = mid;
                lc=lcont;
                txtnombre = new StringItem("Nombre:", ""+contacto.getNombre());
                txtapellido = new StringItem("Apellido:", ""+contacto.getApellido());
                txttelefono = new StringItem("Telefono:", ""+contacto.getTelefono());
                atras = new Command("Atras", Command.EXIT, 1);
                append(txtnombre);
                append(txtapellido);
                append(txttelefono);
                addCommand(atras);
                setCommandListener(this);
        }

        public void commandAction(Command c, Displayable d) {
                if (c == atras) {
                        midlet.pantalla.setCurrent(lc);
                        lc.listarContactos();
                }
        }
}

Clase FormaSMS

package clases;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InterruptedIOException;

import javax.microedition.io.Connector;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;

public class FormaSMS extends Form implements CommandListener {

        TextField mensaje;
        Command atras, enviar;
        String destinatario;

        public FormaSMS(String dest) {
                super("Mensaje a "+dest);
                destinatario=dest;
                mensaje = new TextField("Mensaje", "", 140, TextField.ANY);
                mensaje.setPreferredSize(getWidth()-10,getHeight()-10);
                append(mensaje);
                atras = new Command("Atras", Command.EXIT, 0);
                enviar = new Command("Enviar", Command.OK, 1);
                addCommand(atras);
                addCommand(enviar);
                setCommandListener(this);
        }

        public void commandAction(Command arg0, Displayable arg1) {
                if (arg0.equals(atras)) {
                       
                } else {
                        enviarSMS();
                }
        }

        public void enviarSMS() {
                MessageConnection conn = null;
                TextMessage msg = null;
                try {
                        conn = (MessageConnection) Connector.open("sms://"
                                        + destinatario);
                        msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
                        msg.setPayloadText(mensaje.getString());
                        conn.send(msg);
                        conn.close();
                } catch (InterruptedIOException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        conn = null;
                }
        }
}

Clase JZChoiceGroup

package clases;

import javax.microedition.lcdui.ChoiceGroup;

public class JZChoiceGroup extends ChoiceGroup{

        int indice;
        String nombre;
       
        public JZChoiceGroup(int i, String nom) {
                super(""+nom, ChoiceGroup.POPUP);
                indice=i;
                nombre=nom;
        }

        public int getIndice() {
                return indice;
        }

        public void setIndice(int indice) {
                this.indice = indice;
        }

        public String getNombre() {
                return nombre;
        }

        public void setNombre(String nombre) {
                this.nombre = nombre;
        }

}

Clase Contacto

package clases;

public class Contacto {
       
        String nombre;
        String apellido;
        String telefono;
       
        public Contacto(String n, String a, String t){
                nombre=n;
                apellido=a;
                telefono=t;
        }

        public String getNombre() {
                return nombre;
        }

        public void setNombre(String nombre) {
                this.nombre = nombre;
        }

        public String getApellido() {
                return apellido;
        }

        public void setApellido(String apellido) {
                this.apellido = apellido;
        }

        public String getTelefono() {
                return telefono;
        }

        public void setTelefono(String telefono) {
                this.telefono = telefono;
        }

}

Clase RMSOperaciones

package clases;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.rms.*;

public class RMSOperaciones {

        RecordStore rs;

        public RMSOperaciones() {
        }

        public boolean abrirZona(String nombreZona) {
                try {
                        rs = RecordStore.openRecordStore(nombreZona, true);
                        return true;
                } catch (RecordStoreException e) {
                        e.toString();
                        return false;
                }
        }

        public boolean adicionarRegistro(int indice,Contacto c) {
                try {
                        byte[] mensaje;
                        ByteArrayOutputStream baos=new ByteArrayOutputStream();
                        DataOutputStream dos=new DataOutputStream(baos);
                        dos.writeUTF(c.getNombre());
                        dos.writeUTF(c.getApellido());
                        dos.writeUTF(c.getTelefono());
                        mensaje = baos.toByteArray();
                        if(indice!=-1){
                                rs.setRecord(indice,mensaje, 0, mensaje.length);
                        }else{
                                rs.addRecord(mensaje, 0, mensaje.length);
                        }
                        System.out.println(c.getNombre()+"-"+c.getApellido());
                        return true;
                } catch (RecordStoreException e) {
                        e.toString();
                        return false;
                } catch (IOException e) {
                        e.printStackTrace();
                        return false;
                }
        }

        public boolean adicionarRegistro(String valor) {
                byte[] mensaje;
                mensaje = valor.getBytes();
                try {
                        rs.addRecord(mensaje, 0, mensaje.length);
                        return true;
                } catch (RecordStoreException e) {
                        e.toString();
                        return false;
                }
        }

        public String listarRegistro() {
                byte[] reg = new byte[100];
                int tam;
                String buffer = "";
                try {
                        for (int i = 1; i <= rs.getNumRecords(); i++) {
                                tam = rs.getRecordSize(i);
                                reg = rs.getRecord(i);
                                buffer += "\n" + i + new String(reg, 0, tam);
                        }

                } catch (RecordStoreException e) {
                        System.out.println("Error de Lectura 1");
                }
                return buffer;
        }
       
        public int numeroDeRegistros(){
                try {
                        return rs.getNumRecords();
                } catch (RecordStoreNotOpenException e) {
                        e.printStackTrace();
                        return 0;
                }
        }
       
        public void eliminarContactos(){
                try {
                        for(int i=1;i<rs.getNumRecords()+1;i++){
                                rs.deleteRecord(i);
                        }
                } catch (RecordStoreNotOpenException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (InvalidRecordIDException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (RecordStoreException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
       
        public void eliminarContactos(int i){
                try {
                        rs.deleteRecord(i);
                } catch (RecordStoreNotOpenException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (InvalidRecordIDException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (RecordStoreException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
       
        public boolean actualizarRegistro(Contacto c, Contacto cact){
                try {
                        String n=c.getNombre()+" "+c.getApellido();
                        for(int i=1;i<rs.getNumRecords()+1;i++){
                                byte[] reg = new byte[100];
                                reg=rs.getRecord(i);
                                ByteArrayInputStream bais= new ByteArrayInputStream(reg);
                                DataInputStream dis=new DataInputStream(bais);
                                String nom=dis.readUTF();
                                String ape=dis.readUTF();
                                System.out.println(n+"--"+nom+" "+ape);
                                if(n.equalsIgnoreCase(nom+" "+ape)){
                                        System.out.println(i); 
                                        adicionarRegistro(i, cact);
                                        return true;
                                }
                        }
                        return false;
                } catch (RecordStoreNotOpenException e) {
                        e.printStackTrace();
                        return false;
                } catch (IOException e) {
                        e.printStackTrace();
                        return false;
                } catch (InvalidRecordIDException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return false;
                } catch (RecordStoreException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return false;
                }
        }

        public Contacto listarRegistro(int r) {
                byte[] reg = new byte[100];
                Contacto c=null;
                ByteArrayInputStream bais;
                DataInputStream dis;
                String[] datos = new String[3];
                try {
                        reg = rs.getRecord(r);
                        bais = new ByteArrayInputStream(reg);
                        dis = new DataInputStream(bais);
                        c=new Contacto(dis.readUTF(), dis.readUTF(), dis.readUTF());
                } catch (RecordStoreException e) {
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return c;
        }

        public boolean cerrarZona() {
                try {
                        rs.closeRecordStore();
                        return true;
                } catch (RecordStoreException e) {
                        e.toString();
                        return false;
                }
        }
}

Espero leer sus comentarios y sus propuestas. Recuerden pueden descargar el proyecto directamente desde aquí.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de beto.bateria

Indice del RMS

Algunas veces en adicionarRegistro(int indice,Contacto c), el indice tiene el valor -1:

if(indice!=-1){
        rs.setRecord(indice,mensaje, 0, mensaje.length);
}else{
        rs.addRecord(mensaje, 0, mensaje.length);
}

Ese mismo valor lo usas para rs.setRecord(indice,mensaje, 0, mensaje.length), ¿funciona bien?, ¿pueden editar registros sin ningun problema?

O a lo mejor me estoy perdiendo algo.
Me da la impresion que contacto deberia tener una variable index, para poder editar la informacion.
En actualizarRegistro usas un bucle, y deberias utilizar RecordFilter.

Explico:
Un RMS automaticamente genera un valor incremental para el indice, aunque se borren los registros, este valor se va ir incrementando si agregas mas registros.

Para buscar un registro dentro del RMS se utiliza la interfaz RecordFilter.

Te recomiendo que la clase Contacto tenga una variable index. Podras obtener el index a traves de las interfaces RecordComparator, RecordEnumeration, RecordFilter, RecordListener.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">