Iniciante J2Me e RMS - problema ao salvar

Pessoal,

Estou começando a mexer com J2ME agora, RMS nunca tinha visto, fui tentar fazer um aplicativo de teste aqui agora, mas estou com problemas.
Tenho que entregar um aplicativo de celular com acesso ao BD, transação e tudo mais, mas nao sei nem por onde começar.
A interface do teste que estou fazendo está funcionando, o problema está na hora de salvar e/ou pesquisar os dados, pois ele mostra que obteve sucesso ao salvar o resgistro, mas quando vou pesquisar nao encontra nada.
Se alguem puder me ajudar, ficarei muito grato, estou perdido e tenho que entregar o trabalho semana q vem.

Segu meu Midlet:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
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.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreNotOpenException;

public class CatalogoDeEnderecoMidlet extends MIDlet implements CommandListener {

    private Display display;
    private Form formPrincipal;
    private TextField nome;
    private TextField endereco;
    private TextField itemBusca;
    private Command cmdSair;   // Botão para sair do MIDlet
    private Command cmdSalvar;   // Botão para salvar no record store
    private Command cmdProcurar;   // Botão para encontrar um endereço
    private Command cmdExcluir;    // Botão para remover um nome do cadastro
    private Command cmdAdicionar;    // Botão para adicionar o endereço
    private StringItem opcoesMenu;
    private Command cmdProcurarOK;
    private Command cmdProcurarVoltar;
    private Command cmdVoltar;
    private Command cmdExcluirOK;
    private Command cmdExcluirVoltar;
    private RecordStore rs;   // Objeto para manipulação do Record Store

    public CatalogoDeEnderecoMidlet() throws RecordStoreException
    {
        rs = RecordStore.openRecordStore("CatalogoDeEdenreco", true);
    }

    public void startApp() throws MIDletStateChangeException
    {        
        //telaPrincipal();
        formPrincipal = new Form ("Catálogo de endereços");
        opcoesMenu = new StringItem ("Escolha a opção no Menu", null);
        cmdAdicionar = new Command ("Adicionar", Command.SCREEN, 1);
        cmdProcurar = new Command ("Encontrar", Command.SCREEN, 1);
        cmdExcluir = new Command ("Remover", Command.SCREEN, 1);
        cmdSair = new Command ("Sair", Command.SCREEN, 1);

        formPrincipal.append(opcoesMenu);
        formPrincipal.addCommand(cmdAdicionar);
        formPrincipal.addCommand(cmdProcurar);
        formPrincipal.addCommand(cmdExcluir);
        formPrincipal.addCommand(cmdSair);
        formPrincipal.setCommandListener((CommandListener) this);

        display = Display.getDisplay(this);
        display.setCurrent(formPrincipal);
    }

    /* private void telaPrincipal()
     {
         formPrincipal = new Form ("Catálogo de endereços");
         strOpt = new StringItem ("Escolha a opção no Menu", null);
         cmdAdicionar = new Command ("Adicionar", Command.SCREEN, 1);
         cmdProcurar = new Command ("Encontrar", Command.SCREEN, 1);
         cmdExcluir = new Command ("Remover", Command.SCREEN, 1);
         cmdSair = new Command ("Sair", Command.SCREEN, 1);

         formPrincipal.append(strOpt);
         formPrincipal.addCommand(cmdAdicionar);
         formPrincipal.addCommand(cmdProcurar);
         formPrincipal.addCommand(cmdExcluir);
         formPrincipal.addCommand(cmdSair);
         formPrincipal.setCommandListener((CommandListener) this);
         
         display = Display.getDisplay(this);
         display.setCurrent(formPrincipal);
     }*/

    public void pauseApp()
    {
    }

    public void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    }

    public void commandAction(Command cmd, Displayable disp)
    {
        if (cmd == cmdSair)
        {
            try 
            {
                destroyApp(true);
            }
            catch (MIDletStateChangeException e)
            {
                e.printStackTrace();
            }
            notifyDestroyed();
        } 
        else if (cmd == cmdAdicionar)
        {
            exibirAdicionarEndereco();
        }
        else if (cmd == cmdSalvar)
        {
            try 
            {
                salvarEndereco(nome.getString(), endereco.getString());
            }
            catch (RecordStoreException e)
            {
                e.printStackTrace();
            }
        }
        else if (cmd == cmdProcurar)
        {
            exibirEncontrarEndereco();
        }
        else if (cmd == cmdExcluir)
        {
            exibirExcluirEndereco();
        }
        else if (cmd == cmdProcurarOK) 
        {
            try 
            {
                procurarEndereco(itemBusca.getString());
            }
            catch (RecordStoreException e) 
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        else if (cmd == cmdProcurarVoltar || cmd == cmdExcluirVoltar || cmd == cmdVoltar)
        {
//            telaPrincipal();
            display.setCurrent(formPrincipal);
        }
        else if (cmd == cmdExcluirOK) 
        {
            try 
            {
                excluirEndereco();
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            catch (RecordStoreException e)
            {
                e.printStackTrace();
            }
        }
    }

    private void exibirAdicionarEndereco()
    {
        Form form = new Form ("Adicionar endereços");
        nome = new TextField ("Nome", "", 30, TextField.ANY);
        endereco = new TextField ("Endereço", "", 50, TextField.ANY);
        cmdSalvar = new Command ("Salvar", Command.SCREEN, 1);

        form.append(nome);
        form.append(endereco);
        form.addCommand(cmdSair);
        form.addCommand(cmdSalvar);
        form.setCommandListener((CommandListener) this);

        display = Display.getDisplay(this);
        display.setCurrent(form);
    }

    private void exibirEncontrarEndereco()
    {
        Form form = new Form("Achar endereço");
        cmdProcurarOK = new Command("OK", Command.SCREEN, 2);
        cmdProcurarVoltar = new Command("Voltar", Command.SCREEN, 2);
        itemBusca = new TextField("Entre com o nome", "", 30, TextField.ANY);

        form.append(itemBusca);
        form.addCommand(cmdProcurarOK);
        form.addCommand(cmdProcurarVoltar);
        form.setCommandListener((CommandListener) this);

        display = Display.getDisplay(this);
        display.setCurrent(form);
    }
    
    private void exibirExcluirEndereco()
    {
        Form form = new Form ("Remover endereço");
        nome = new TextField ("Entre com o nome", "", 30, TextField.ANY);
        cmdExcluirOK = new Command("OK", Command.SCREEN, 1);
        cmdExcluirVoltar = new Command("Voltar", Command.SCREEN, 1);

        form.append(nome);
        form.addCommand(cmdExcluirOK);
        form.addCommand(cmdExcluirVoltar);
        form.setCommandListener((CommandListener) this);

        display = Display.getDisplay(this);
        display.setCurrent(form);
    }


    private void salvarEndereco(String nome, String endereco) throws
             RecordStoreException
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);

        try
        {
            dos.writeUTF(nome);
            dos.writeUTF(endereco);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

        rs.addRecord(baos.toByteArray(), 0, baos.toByteArray().length);
        exibirMensagem("Sucesso !");
    }        
    
    private void procurarEndereco(String name) throws RecordStoreException,
            IOException
    {
        RecordEnumeration re = null;
        boolean encontrarEndereco = false;

        try
        {
            re = rs.enumerateRecords(null, null, false);
        }
        catch (RecordStoreNotOpenException e1)
        {
            e1.printStackTrace();
        }
        
        if (re.numRecords() > 0)
        {
            ByteArrayInputStream bais = null;
            DataInputStream dis = null;
            String nomeRMS = null;

            byte [] record = re.nextRecord();
            
            while (re.hasNextElement())
            {
                bais = new ByteArrayInputStream (record);
                dis = new DataInputStream(bais);
                nomeRMS = dis.readUTF();
                if (name.compareTo(nomeRMS)== 0)
                {
                    encontrarEndereco = true;
                    System.out.println(nomeRMS);
                    exibirEndereco(dis.readUTF());
                    break;
                }
                
                record = re.nextRecord();
            }
            if (!encontrarEndereco)
            {
                exibirMensagem("Endereço não cadastrado");
            }
        }
        else 
        {
            exibirMensagem("Endereço não cadastrado");
        }
    }

    private void excluirEndereco() throws RecordStoreException, IOException
    {
        RecordEnumeration re = null;
        boolean procurarEndereco = false;

        try
        {
            re = rs.enumerateRecords(null, null, false);
        }
        catch (RecordStoreNotOpenException e1)
        {
            e1.printStackTrace();
        }

        if (re.numRecords() > 0)
        {
            ByteArrayInputStream bais = null;
            DataInputStream dis = null;
            String nomeRMS = null;

            byte [] record = re.nextRecord();
            int id = 0;

            while (re.hasNextElement())
            {
                System.out.println (id);
                bais = new ByteArrayInputStream (record);
                dis = new DataInputStream(bais);
                nomeRMS = dis.readUTF();
                String nomeDigitado = nome.getString();
                if (nomeDigitado.compareTo(nomeRMS)== 0)
                {
                    procurarEndereco = true;

                    record = re.nextRecord();
                    id = re.previousRecordId();

                    rs.deleteRecord(id);
                    exibirMensagem("Sucesso!");
                    break;
                }
                record = re.nextRecord();
            }
            if (!procurarEndereco)
            {
                exibirMensagem("Endereço não cadastrado");
            }
        }
        else
        {
            exibirMensagem("Endereço não cadastrado");
        }
    }  

     private void exibirEndereco(String enderecoRMS)
     {
         StringItem strEndereco;
         Form form = new Form("Mostrar endereço");
         cmdVoltar = new Command("Voltar", Command.SCREEN, 1);
         
         strEndereco = new StringItem("Endereço:", enderecoRMS);

         form.append(strEndereco);
         form.addCommand(cmdVoltar);
         form.setCommandListener((CommandListener) this);

         display.setCurrent(form);
     }      

     private void exibirMensagem(String msg)
     {
         Alert alerta = new Alert("Mensagem", msg, null, AlertType.CONFIRMATION);
         display.setCurrent(alerta, formPrincipal);
     }
}

Bom,

tanto vc quanto o Andrea Pivoto Patta http://www.devmedia.com.br/articles/viewcomp.asp?comp=155

por coincidência erraram não em RMS mas sim em lógica.

Anexo o programa resolvido. Por favor, teste e se tiver mais algum erro me avise.

abs

Valeu pela ajuda.

Teria como você indicar nesse meu código que postei, onde devo fazer as alterações. Não estou conseguindo abrir o seu codigo fonte aqui, pelo JAR.

Valeu.

se fosse dúvida de RMS eu postaria como se trata de erro de lógica isso é uma consultoria, normalmente eu cobro.

Eu não sei se está 100% funcionando, não tive tempo para testar espero que você o faça antes de me pedir para postar a solução.

Se quiser testar no WTK vai o JAD também.

Boa sorte

Eu pedi para voce comentar as alterações no codigo pois sou iniciante e estou perdido, e quando abro seu .jar no NetBeans, não consigo acessar o codigo-fonte, dentro do .jar tem apenas um arquivo, chamado AdressCatalog.class, esse arquivo não abre em lugar nenhum, o NetBeans diz que não existe código a ser mostrado, por isso pedi as anotações no código, pois esse código eu consigo acessar e alterar.
Tambem não consigo rodar esse .jar, então não tem como testar, se conseguisse testar, o faria antes de te pedir a solução.

Eu pedi para voce comentar as alterações no codigo pois sou iniciante e estou perdido, e quando abro seu .jar no NetBeans, não consigo acessar o codigo-fonte, dentro do .jar tem apenas um arquivo, chamado AdressCatalog.class, esse arquivo não abre em lugar nenhum, o NetBeans diz que não existe código a ser mostrado, por isso pedi as anotações no código, pois esse código eu consigo acessar e alterar.
Tambem não consigo rodar esse .jar, então não tem como testar, se conseguisse testar, o faria antes de te pedir a solução.

Você não vai precisar o usar NetBeans se instalar pelo menos o Wireless Toolkit for CLDC 2.5.1 for Windows .

com WTK instalado, basta duplo click no JAD

Teste o programa se estiver 100%, continuaremos

abs

Tentei executar o JAD e deu esse erro: com.sun.kvem.midletsuite.InvalidJadException: Reason = 36

Os dois arquivos .jar e .jad estão no mesmo diretório?

Show, ta funcionando.

Mas o problema eh que tenho que entregar um aplicativo para celular com herança e transações e não sei como fazer isso e tambem não sei onde estou errando no codigo que postei acima.
Mas valeu pela ajuda

eu faço assim

public static void createDB()
    {
        try
        {
           rs = RecordStore.openRecordStore("ip_servidor",true);
           if(rs.getNumRecords() == 0)
           {
               String value = "127.0.0.1";
               byte[] code = value.getBytes();
               int id = rs.addRecord(code, 0, code.length);
           }
        }
        catch(Exception ex)
        {
            
        }
    }
    private void readDB()
    {
        String dado;
        try
        {
            for(int k=1;k<=rs.getNumRecords();k++)
            {
                 byte[] retrieved = rs.getRecord(k);
                 dado = new String(retrieved);
                 tf_ip.setString(dado);
            }
        }
        catch(Exception ex)
        {
           
        }
    }
    private void alterDB()
    {
        String value = tf_ip.getString();
        byte[] code = value.getBytes();
        try
        {
           rs.setRecord(1,code, 0, code.length);
        }
        catch (RecordStoreNotOpenException ex)
        {
            
        }
        catch (RecordStoreException ex)
        {
            
        }
    }
    public void closeDB()
    {
        try
        {
           rs.closeRecordStore();
        }
        catch(Exception ex)
        {
            
        }
    }

Entendi

Valeu

Voce teria algum exemplo de como usar herença em J2ME?

Tem este aqui !

http://www.guj.com.br/posts/list/219321.java#1120817

O que vocês acham pessoal ? Indiquei certo ?

Nao sei onde tem herança nesse meu post (o link q vc colocou), mas tudo bem.

Muito bom boone!

para um bom entendedor meia palavra basta ou um link, :lol:

rs rs engraçado mais e verdade esse proprio topico mostra como usar herança e interfaxe

Ufa…achei que estava ficando louco…

O cara pede exemplo e ele próprio parece não entender o que o ‘extends’ e ‘implements’ significam…

obrigado JJjava por concordar pelo menos neste post de que eu tenho alguma razão…HAHAHA e HEHEHE…