Bom Pessoal estou começando a usar JME e gostaria da ajuda de vcs. é o seguinte estou fazendo uma pequena aplicação com jme usando RecordStore como minha persistencia, conseguir gravar dados, consultar pelo id, mas na hora de listar todos os dados gravado tá dando um erro no getNumRecords ele não retornando a quantidade dos meus dados! Segue o metodo de listar abaixo. agradeço a atenção de todos.
Mesmo antes de ver qual é o erro, eu arrisco dizer que o problema não é com o getNumRecords. Creio que você deva usar RecordEnumeration, pois como você está lendo os dados em sequência, caso um do records tenha sido excluido o RMS dá erro. Por exemplo se i=3 e o record 3 foi deletado.
Tente sempre usar RecordEnumeration para trabalhar com RMS para evitar erros.
Segue meu erro
TRACE: <at java.lang.NullPointerException: 0>, Exception caught in Display class
java.lang.NullPointerException: 0
at ExibirLista.listarRecorStore(ExibirLista.java:56)
at EventsMidlet.commandAction(EventsMidlet.java:122)
at javax.microedition.lcdui.Display$ChameleonTunnel.callScreenListener(), bci=46
at com.sun.midp.chameleon.layers.SoftButtonLayer.processCommand(), bci=74
at com.sun.midp.chameleon.layers.SoftButtonLayer.soft1(), bci=37
at com.sun.midp.chameleon.layers.SoftButtonLayer.keyInput(), bci=36
at com.sun.midp.chameleon.CWindow.keyInput(), bci=38
at javax.microedition.lcdui.Display$DisplayEventConsumerImpl.handleKeyEvent(), bci=17
at com.sun.midp.lcdui.DisplayEventListener.process(), bci=277
at com.sun.midp.events.EventQueue.run(), bci=179
at java.lang.Thread.run(Thread.java:619)
maxdavis
como eu passaria
rs.enumerateRecords(null, null, false).numRecords(); a quantidade de registros para meu laço?
E
edwagner
Pois é, o erro NullPointerException indica que o RMS não tá achando o registro. Como eu disse, você deve usar rs = RecordStore.openRecordStore(store, true);
RecordEnumeration re = rs.enumerateRecords(null, null, false); Daí pra em diante toda navegação que você for fazer no recordstore você usa “re” ao invés de “rs”. Dá uma lida em como trabalhar com RecordEnumeration, é a melhor forma de trabalhar com RMS sem ter que tratar exceções.
Um abraço.
E
edwagner
maxdavis:
como eu passaria rs.enumerateRecords(null, null, false).numRecords(); a quantidade de registros para meu laço?
Mas de qualquer forma não funciona no seu código, porque (vamos supor que o registro 2 foi deletado) quando você for pesquisar o banco e i=2 vai dar erro. Você tem que usar o RecordEnumeration ou então tratar esta exceção com catch que não é muito prático.
maxdavis
Bom pessoal tentei usar o enumerateRecords como edwagner comentou e infelizmente minha variável está retornando null, Debuguei, e minha variável total não pega valores e outra tentei tb passar direto sem variavel e tb não pega meus valores. Vou colocar minha classe de persistencia pra pedir mais uma vez ajuda a vocês :)
Bom Pessoal o metodo que tinha colocado dará um erro na hora de deletar como EdWagner falou fiz um novo metodo, que não gera esse problema na hora de deletar.
publicEventos[]listaEventosWhile()throwsRecordStoreException{rs=RecordStore.openRecordStore("Eventos",true);inttotal=0;intcontador=0;total=rs.enumerateRecords(null,null,false).numRecords();Eventos[]listaEventos=newEventos[total];recordEnumeration=rs.enumerateRecords(null,null,false);try{while(recordEnumeration.hasNextElement()){Stringtxt;eventos=returnEventos(recordEnumeration.nextRecord());contador++;listaEventos[contador -1 ]=eventos;}}catch(InvalidRecordIDExceptionex){System.out.println("-- ID inexistente");}catch(RecordStoreNotOpenExceptionex){System.out.println("-- O Record Store esta fechado");}rs.closeRecordStore();returnlistaEventos;}