Estou desenvolvendo um programa em J2ME com persistência através do RecordStore. Para realizar a programação, estou utilizando o eclipse. O fato é que de uma hora para outra os dados começaram a ser perdidos e a cada vez que eu reinicializo o aplicativo o RecorStore inicia com 0 registros. Nas primeiras vezes que rodei estava funcionando e agora nada.
Será que é algum problema de configuração do eclipse?
Estou desenvolvendo um programa em J2ME com persistência através do RecordStore. Para realizar a programação, estou utilizando o eclipse. O fato é que de uma hora para outra os dados começaram a ser perdidos e a cada vez que eu reinicializo o aplicativo o RecorStore inicia com 0 registros. Nas primeiras vezes que rodei estava funcionando e agora nada.
Será que é algum problema de configuração do eclipse?
Abraços a todos.
Posta o código que usa o RecordStore, aqui ninguém é adivinho.
Também aprender a se virar sem IDE ajuda nestes casos.
M
malfattirs
Olá mochuara!
Acho que você não entendeu minha pergunta. vou explicar! O problema não está no código, tanto é que no dispositivo funciona, o problema está nas conficurações do eclipse ou do emulador do J2ME que não está mais funcionando como deveria. Nas primeiras vezes que executei tudo funcionava normalmente, mas depois que inseri vários registros, passou a não funcionar mais.
Valeu a tentativa.
M
mochuara
malfattirs:
Olá mochuara!
Acho que você não entendeu minha pergunta. vou explicar! O problema não está no código, tanto é que no dispositivo funciona, o problema está nas conficurações do eclipse ou do emulador do J2ME que não está mais funcionando como deveria. Nas primeiras vezes que executei tudo funcionava normalmente, mas depois que inseri vários registros, passou a não funcionar mais.
Valeu a tentativa.
Isto aparentemente não faz sentido. Eu lembro que os dados do recordstore no emulador ficam armazenados no diretorio do wtk, verifique se tem permissão para escrita nesta pasta. Se não for isto provavelmente vc esta fazendo alguma coisa errada no código.
M
malfattirs
Bom, acho que o problema não é no código, mas aí vai:
importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Form;importjavax.microedition.lcdui.TextBox;importjavax.microedition.lcdui.TextField;importjavax.microedition.midlet.MIDlet;importjavax.microedition.rms.RecordStore;publicclassRespostaExercicioextendsMIDletimplementsCommandListener{//Atributos da classeprivateDisplaydisplay=null;privateFormformPrincipal=null,formInsere=null;privateRecordStorerecordStore=null;privateCommandsair=null;privateCommandleitura=null;privateCommandescrita=null;privateCommandvoltar=null;privateCommandsalvar=null;privateTextBoxformMostra=null;privateTextFieldcampoTexto=null;/*********************************************************** *Nome: Exemplo3() *Descrição: construtor da classe *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/publicRespostaExercicio(){//Obtem o display do dispositivodisplay=Display.getDisplay(this);//Cria os formuláriosformPrincipal=newForm("Persistencia");formInsere=newForm("Insercao");formMostra=newTextBox("Registros cadastrados","",2000,TextField.ANY);//Cria os comandos da aplicaçãosair=newCommand("Sair",Command.CANCEL,0);leitura=newCommand("Leitura",Command.SCREEN,1);escrita=newCommand("Escrita",Command.SCREEN,1);voltar=newCommand("Voltar",Command.SCREEN,1);salvar=newCommand("Salvar",Command.CANCEL,0);//Adiciona os comandos aos formuláriosformPrincipal.addCommand(sair);formPrincipal.addCommand(escrita);formPrincipal.addCommand(leitura);formInsere.addCommand(voltar);formInsere.addCommand(salvar);formMostra.addCommand(voltar);//Cria o campo de textocampoTexto=newTextField("Nome","",20,TextField.ANY);formInsere.append(campoTexto);//Registra o formulário no tratador de eventosformPrincipal.setCommandListener(this);formInsere.setCommandListener(this);formMostra.setCommandListener(this);}/*********************************************************** *Nome: destroyApp() *Descrição: método da classe MIDlet chamado quando a aplicação * é finalizada *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/protectedvoiddestroyApp(booleanarg0){}/*********************************************************** *Nome: pauseApp() *Descrição: método da classe MIDlet chamado quando a aplicação * é pausada *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/protectedvoidpauseApp(){}/*********************************************************** *Nome: startApp() *Descrição: método da classe MIDlet chamado quando a aplicação * é iniciada *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/protectedvoidstartApp(){//Configura o formulario para ser apresentado na teladisplay.setCurrent(formPrincipal);//Realiza a abertura do RecordStoreabreRecordStore();}/*********************************************************** *Nome: abreRecordStore() *Descrição: método que abre o armazem de dados *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/publicvoidabreRecordStore(){//Abre o RecordStore para armazenamentotry{recordStore=RecordStore.openRecordStore("teste",true);System.out.println(recordStore.getSizeAvailable());System.out.println("RecordStore aberto");}catch(Exceptione){destroyApp(true);this.notifyDestroyed();}}/*********************************************************** *Nome: fechaRecordStore() *Descrição: método que fecha o armazem de dados *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/publicvoidfechaRecordStore(){//Fecha o RecordStoretry{recordStore.closeRecordStore();System.out.println("RecordStore fechado");}catch(Exceptione){destroyApp(true);this.notifyDestroyed();}}/*********************************************************** *Nome: escreveDados *Descrição: insere dados do formulário no RecordStore *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/publicvoidescreveDados(){if(campoTexto.getString().compareTo("")!=0){try{ByteArrayOutputStreamba=newByteArrayOutputStream();DataOutputStreamds=newDataOutputStream(ba);ds.writeUTF(campoTexto.getString());ds.writeInt(recordStore.getNumRecords()+1);byte[]dados=ba.toByteArray();recordStore.addRecord(dados,0,dados.length);ds.close();ba.close();}catch(Exceptione){}}}/*********************************************************** *Nome: mostraDados *Descrição: mostra os dados de um RecordStore em um TextBox *Parâmetros: Nenhum *Retorno: Nenhum ************************************************************/publicvoidmostraDados(){try{formMostra.setString("");for(intiIndex=recordStore.getNumRecords();iIndex>=1;iIndex--){byte[]dados=recordStore.getRecord(iIndex);ByteArrayInputStreamba=newByteArrayInputStream(dados);DataInputStreamds=newDataInputStream(ba);Stringnome=ds.readUTF();intrecordId=ds.readInt();formMostra.insert("Nome: "+nome+"\nId: "+recordId+"\n\n",0);ds.close();ba.close();}}catch(Exceptione){}}/*********************************************************** *Nome: commandAction() *Descrição: método da interface CommandListener responsável * pelo tratamento de eventos *Parâmetros: Command, Displayable *Retorno: Nenhum ************************************************************/publicvoidcommandAction(Commandcommand,Displayabledisp){if(command==salvar){escreveDados();campoTexto.setString("");}elseif(command==leitura){display.setCurrent(formMostra);mostraDados();}elseif(command==escrita){campoTexto.setString("");display.setCurrent(formInsere);}elseif(command==voltar){display.setCurrent(formPrincipal);}elseif(command==sair){fechaRecordStore();destroyApp(true);notifyDestroyed();}}}
M
malfattirs
Para quem se deparar com o mesmo problema, aqui está a solução: