j2me + rms

16 respostas
M

Pessoal estou fazendo alguns testes, estou tendo um problema.
Qdo fecho o emulador os dados do meu RMS somem mesma coisa contece qdo minha app esta no celular é coisa simples adiciona normal mas se fechar a app ja erra, alguem pode me dar um help, abaixo meu programa:
Isto sempre funcionou mas agora comecou com este problema.

Grato.

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Vector;
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.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;

/**
 * @author lorenzi
 */
public class firstRMS extends MIDlet implements CommandListener {

    private Display disp;
    private Form    frm;
    private int     number;
    private TextBox tbNumber;
    private Command cmSair;
    private Command cmIncluir;
    private Command cmVoltaForm;
    private RecordStore rsNumber;
    private RecordEnumeration reNumber;
    private Vector veNumber = new Vector();
    private String msg;


    public void startApp() {
        disp = Display.getDisplay(this);
        frm = new Form("Bem vindo ao RMS");
        cmSair = new  Command("Sair", Command.EXIT, 1);
        cmIncluir = new Command("Adicionar", Command.ITEM, 2);
        cmVoltaForm = new Command("Voltar", Command.BACK, 1);
        frm.addCommand(cmSair);
        frm.addCommand(cmIncluir);
        frm.setCommandListener(this);
        tbNumber = new TextBox("Lista de Cadastro", null,600,TextField.ANY);
        tbNumber.addCommand(cmVoltaForm);
        tbNumber.setCommandListener(this);

        disp.setCurrent(tbNumber);
        setRms();
        mostraDados();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void setRms(){
        try
        {
           rsNumber = RecordStore.openRecordStore("dbNumber", true);
           System.out.println("Banco criado");
           System.out.println("Banco: "+rsNumber.getName());   //nome do banco
           System.out.println("Registros: " + rsNumber.getNumRecords());   

        }
        catch(Exception erro)
        {
           System.out.println("Erro no banco de dados");
        }
    }
    public void insere(){
        try{
           //responsavel pela manipulacao byte a byte
            //conjunto de dados e manipulo em bytes
           ByteArrayOutputStream bStream = new ByteArrayOutputStream();
           //fluxo de saida de dados, possibilita escrever em bites a bites
           DataOutputStream      dStream = new DataOutputStream(bStream);
           dStream.writeUTF("Numero: ");
           dStream.writeInt(number);
           //fluxo de saida de dados força para saida de memoria
           dStream.flush();
           //vetor para manipular byte a byte
           byte [] numeros = bStream.toByteArray();
           //adiciona no RMS
           rsNumber.addRecord(numeros,0,numeros.length);
           bStream.close();
           dStream.close();
        }
        catch(Exception e)
        {
            System.out.println("Errroooo de inserir");
        }
    }
    public void mostraDados(){
        try{
            ByteArrayInputStream inputStream = null;
            DataInputStream      dataStream  = null;
            //respositorio de dados = resultSet
            //primeiro filtro recordFilter
            //segundo ordenar lista
            //terceiro dados atualizados qdo deletar se for false porde mostrar
            reNumber  = rsNumber.enumerateRecords(null, null, false);
            int id = 0;
            byte[] dados = null;
            veNumber.removeAllElements();
            //repeticao
            msg = "";
            while (reNumber.hasNextElement())
            {
               id = reNumber.nextRecordId();
               veNumber.addElement(""+id);
               dados = rsNumber.getRecord(id);
               //inicializa com o valor de dados byte a byte
               inputStream = new ByteArrayInputStream(dados);
               //iniciliaza os caracteres com o retorno do inputStream
               dataStream  = new DataInputStream(inputStream);

               msg =  msg + dataStream.readUTF()+ " - " + dataStream.readInt() + "\n";
            }
            if (msg == ""){
                msg = "Nenhum dado encontrado!";
            }
            tbNumber.setString(msg);
            inputStream.close();
            dataStream.close();

        }
        catch(Exception e)
        {
          System.out.println("Erro ao acessar dados!");
        }
    }
    public void commandAction(Command c, Displayable d) {
        if (c == cmSair){
            destroyApp(true);
            notifyDestroyed();
        }else
        if (c == cmIncluir){
           for (int i = 0;i < 10; i++){
               number = i;
               insere();
           }
           mostraDados();
           disp.setCurrent(tbNumber);
        }else
        if (c == cmVoltaForm){
           disp.setCurrent(frm);
        }

    }
}

16 Respostas

dj11

acredito que o problema esteja no metodo inserir()… quando vc executa o programa ele grava normal no armazem e quando sai e volta ele sumiu. mas eles nao sumiram nao!!! eles estao lá, o erro tá no “indice” que vc está lendo quando volta a a executar a MIDlet, vc esta lendo um indice lá no final que esta vazio (null) , vc precisa volta o indice para o inicio e ler todo o armazem de dados. blz!!!

M

Opas pode ser mais claro, nao consegui entender a jogada?

dj11

OK! A PRIMEIRA VEZ QUE VC RODOU SEU APLICATIVO O SISTEMA INTERNO DO RMS ESCREVEU E LEU TODOS OS DADOS DESDE O INICIO “1” ATE O FIM “<10”, UM EXEMPLO, COM ISSO SEU IDICE FICOU IGUAL A 10. AGORA QUANDO VC RODA O APLICATIVO O RMS LE O ULTIMO INDICE DO VETOR QUE POR SINAL ESTA VAZIO. ISSO DA A FALSA IMPRESSAO QUE NAO TEM NADA ARMAZENADO. BLZ! JAVA POWERED

M

Sim entendi, mas como resolvo este problema para ficar tudo no mesmo metodo, sempre que inicio pela primeira vez ele entra no meu catch, da erro de acesso aos dados, mas queria ficar com um unico metodo de leitura, desta nameira nao consigo ??

dj11

OLHA RMS GOSTO DE TRABALHAR COM O LIVRO DO “MOU CHOW” ELE FAZ AS COISAS BEM SEPARADAS VARIOS METODOS, AS VEZES TENTAMOS SIMPLIFICAR AS COISAS E NAO SAEM COMO ESPERADO, ESSES CARAS SAO PROFISSIONAIS PRECISAMOS CONFIAR NELES, MAS JA CONSEGUI INSERIR E GRAVAR DADOS NO RMS SEM AUXILIO DE VETORES, TENTA VER O LIVRO DO MOU CHOW. BLZ.

M

Opa Dj++, vc poderia fazer um teste pra min ai, so executar este meu codigo ja revi ele varias x, e testei alguns outros exemplos na internet todos eles sem sucesso, sempre que fecho o emulador os dados somem, vc poderia copiar meu código e rodar somente para verificar se os dados permancen ou não, estou achando que pode ser problema no meu ambiente.

Ate testei um exemplo de uma agenda que achei na net e acontece mesma coisa.

Grato.

dj11

opa desculpa a demora, mas é q eu queria ter certeza, olha so eu uso o eclipse ME e ironicamente ta funcionando normal seu codigo agora, bem parece q o problema é interno, tenta instalar novamente a IDE […] java powered

M

Mas vc nao fez nenhuma alteração no codigo somente o meu codigo mesmo??

dj11

so por curiosidade rodei sem alterar nada e pra minha surpresa funcionou normal, apareceram todos os dados,

dj11

mudando de assunto vc conhece o Polish j2me

M

Nao conheco nao, mas qdo vc fechou o emulador e abriu novamente os dados estavam la??
Acho que vou pro eclipse entao, cara faz uma semana que to me batendo nesse negocio ai…

dj11

tava sim… normal

M

Muito bem senhores depois de muito me bater com este esquema ai resolvi o meu problema, instalei sun_java_wireless_toolkit-2.5.2_01-win e mudei para esta plataforma, plataforma default que o netbeans 6.9 instala nao da certo da erro o RMS nao acessa os dados apos fechar, entao apos intalar mudei no meu projeto a plataforma e pimba funcionou de primeira, fica ai a dica pro pessoal que precisar, valeu e obrigado.

dj11

blz, mt bom. mas vc nao gosta do eclipse…

M

Sim gosto e uso o eclipse, mas dou aula de j2me e tem de ser no netbeans, eu usava a versao 6.5 sem problemas ai migrei pra 6.9 e começou a dar os pane, por isso nao consegui entender o problema, pois os codigos funcionavam…

Mas o eclipse é bem mais estavel que o netbeans

dj11

to montando um grupo de desenvolvimento de games. abri um topico no forum, sobre metodo para empurrar caixas, coloquei um video do 1º projeto, gostaria de sua opiniao… vc pode dar uma olhada! desde ja agradeço. java powered

Criado 22 de janeiro de 2011
Ultima resposta 26 de jan. de 2011
Respostas 16
Participantes 2