ayuda con Lista de valores de los registros del RMS

pedro_jx
03 de Junio del 2008
Hola, estoy haciendo una aplicaci贸n en donde almaceno los siguientes datos: Nombre, Telefono y Correo, He almacenado 4 datos, y cuadno hago una consulta lo represento por medio de una ista lso nombres, sim embargo al ingresar por segunda vez la consulta la lista se duplica con los mismo nombre, y una tercra consulta la lista de triplica y asi sucesivamente. Ya revise el c贸digoy no se como solucionar esto, a v er si alguiense tma la molestia de ver e lcodigo y ayudarme.


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;

public class RMS4 extends MIDlet implements CommandListener{
private RecordStore rms4;
Display ventana;
Form ingreso, consulta;
TextField txtNombre, txtTelefono, correo, txtNombreC, txtTelefonoC, correoC;
Command salir, atras, grabar, ver, eliminar, verLista;
List personas;

public RMS4(){
abrirRS();
ventana = Display.getDisplay(this);
ingreso = new Form("Directorio Telef贸nica");
consulta = new Form("Ver Contactos");
txtNombre = new TextField("Nombre", "", 15, TextField.ANY);
txtTelefono = new TextField("Tel茅fono", "", 7, TextField.NUMERIC);
correo = new TextField("Correo", "", 25, TextField.EMAILADDR);
txtNombreC = new TextField("Nombre", "", 15, TextField.ANY);
txtTelefonoC = new TextField("Tel茅fono", "", 7, TextField.NUMERIC);
correoC = new TextField("Correo", "", 25, TextField.EMAILADDR);
grabar = new Command("Grabar Datos", Command.OK, 1);
ver = new Command("Consultar Datos", Command.OK, 2);
atras = new Command("Atr谩s", Command.BACK, 1);
salir = new Command("Salir", Command.EXIT, 1);
eliminar = new Command("Eliminar", Command.OK, 4);
verLista = new Command("Ver Lista", Command.OK, 3);
ingreso.append(txtNombre);
ingreso.append(txtTelefono);
ingreso.append(correo);
ingreso.addCommand(grabar);
ingreso.addCommand(ver);
ingreso.addCommand(verLista);
ingreso.addCommand(salir);
ingreso.addCommand(eliminar);

consulta.append(txtNombreC);
consulta.append(txtTelefonoC);
consulta.append(correoC);
consulta.addCommand(atras);
consulta.addCommand(salir);
ingreso.setCommandListener(this);
consulta.setCommandListener(this);
personas = new List("Personas", List.IMPLICIT);
personas.addCommand(atras);
personas.setCommandListener(this);

}

public void startApp() {
ventana.setCurrent(ingreso);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d){
if(c == grabar){
String nombre, telefono, mail;
nombre = txtNombre.getString();
telefono = txtTelefono.getString();
mail = correo.getString();
escribirRegistro(nombre, telefono, mail);
}
if(c == ver){
verRegistro();
//ventana.setCurrent(consulta);
}
if(c == verLista){
verListaR();
//ventana.setCurrent(personas);
}
if (c == personas.SELECT_COMMAND){ // Si selecciono
cogerValores(personas.getSelectedIndex());
}
if(c == atras){
ventana.setCurrent(ingreso);
}
if(c == salir){
destroyApp(false);
notifyDestroyed();
}
if(c == eliminar){
cerrar();
borrar();
}
}
public void cerrar(){
try{
rms4.closeRecordStore();
}
catch(RecordStoreException e){
System.out.println("Error al cerrar el RecordStore: " + e);
}
}
public void borrar(){
try{
rms4.deleteRecordStore("Agenda4");
}
catch(RecordStoreException e){
System.out.println("Error al eliinar el Recordstore: " + e);
}
}
public void cogerValores(int x){
byte[] reg = new byte[75];
ByteArrayInputStream bais;
DataInputStream dis;
x = x + 1;
try{
bais = new ByteArrayInputStream(reg);
dis = new DataInputStream(bais);
rms4.getRecord(x, reg, 0);
txtNombreC.setString(dis.readUTF());
txtTelefonoC.setString(dis.readUTF());
correoC.setString(dis.readUTF());
bais.reset();

bais.close();
dis.close();
ventana.setCurrent(consulta);

}
catch(Exception e){
System.out.println("Error");
}
}

public void verRegistro(){
byte[] reg = new byte[75];
ByteArrayInputStream bais;
DataInputStream dis;
try{
bais = new ByteArrayInputStream(reg);
dis = new DataInputStream(bais);
// RecordEnumeration re = rms4.enumerateRecords(null, null, false);
// while(re.hasNextElement()){
for(int i = 1; i <= rms4.getNumRecords(); i++){
// reg = re.nextRecord();
rms4.getRecord(i, reg, 0);
txtNombreC.setString(dis.readUTF());
txtTelefonoC.setString(dis.readUTF());
correoC.setString(dis.readUTF());
System.out.println("Registro n掳 " + i + " Nombre : " + txtNombreC.getString() + " Telefono: " + txtTelefonoC.getString() + " correo: " + correoC.getString());

bais.reset();
}
bais.close();
dis.close();
}
catch(Exception e){
System.out.println("Error");
}
}

public void verListaR(){
int i = 1;
byte[] regl = new byte[75];
ByteArrayInputStream bais;
DataInputStream dis;
try{
bais = new ByteArrayInputStream(regl);
dis = new DataInputStream(bais);
for(i = 1; i <= rms4.getNumRecords(); i++){

rms4.getRecord(i, regl, 0);
txtNombreC.setString(dis.readUTF());


personas.insert((i - 1), txtNombreC.getString(), null);
bais.reset();
}

bais.close();
dis.close();



ventana.setCurrent(personas);

}
catch(Exception e){
System.out.println("Error");
}

}

public void escribirRegistro(String nombre, String telefono, String mail){
byte[] reg;
ByteArrayOutputStream baos;
DataOutputStream dos;
try{
baos = new ByteArrayOutputStream();
dos = new DataOutputStream(baos);
dos.writeUTF(nombre);
dos.writeUTF(telefono);
dos.writeUTF(mail);
dos.flush();
reg = baos.toByteArray();
rms4.addRecord(reg, 0, reg.length);
baos.close();
dos.close();
}
catch(Exception e){
System.out.println("Error al escribir registro");
}
}

public void abrirRS(){
try{
rms4 = RecordStore.openRecordStore("Agenda4", true);
}
catch(RecordStoreException e){
System.out.println("Error al crear el Record Store");
}
}

}

yesy
03 de Junio del 2008
weno yotambien tenia un problema de ke cuando agregaba un regitro y despues mostraba todos los registros en pantalla, se me duplicaban. lo que pasaba es que no limpiaba la pantalla, entonces me aparecia el primer registro, despues otravez el primero y e k acababa de insertar.. y asi sucesivamente.
Yo use: tu_formulario.deleteAll();