RMS Registro com ID 0 (zero)

Bom dia a todos!

Estou com o grave problema gostaria de ver se alguem consegue me ajudar.

Estou com um projeto no XT65 da Cinterion/Siemens no qual ele armazena informações em tabela RMS quando esta fora de cobertura celular, mas quando ele retorna a ter sinal envio todas as informações. Sendo que ele deve ser um fifo, primeiro a entrar primeiro a sair. Para que eu possa fazer isso, quando começo a enviar as informações efetuo uma varredura no RMS ate chegar ao primeiro registro. Mas acontece que algumas vezes esta dizendo que o primeiro registro possui um ID 0 (zero).

este é o trecho do codigo que faço isso.

if (rs.getNumRecords() > 0) {

   // ******* Pega os registro e joga para um enumerator
   RecordEnumeration re = rs.enumerateRecords(null, null, true);
   int cont = re.numRecords();

   // Aki faço a varredura na tabela para pegar o primeiro registro
   // o RMS sempre inicia no ultimo registro.
   // é neste ponto tambem que ocorre o problema de retornar o id = 0
   for (int i = 0; i < cont; i++) {
      id = re.nextRecordId();
   }

   // Aki retorno o registro referente ao id do primeiro registro acima
   dados = new String(rsAlerta.getRecord(id));
                    re.destroy();

}

se formos observar eu não conheço a estrutura do RMS como que ele armazena as informações, mas se formos pensar no conceito da pilha duplamente encadeada o primeiro registro nao esta apontando para null, mas não sei como evitar isso e nem o porque esta acontecendo, so é uma teoria esta da lista duplamente encadeada.

se puderem me ajudar :lol: :? :!: :slight_smile: :smiley: :-o

obrigado

Se quer ir do começo para o fim porque não faz assim:


            RecordEnumeration en = singleton.rms.enumerateRecords(null, null, true);

            while (en.hasNextElement()) {
              byte[] dados = en.nextRecord();
              /*Seu processamento*/
            }

Acho que isso é o basico para te servir, ja que vc pode pegar tambem o id, para ir apagando conforme envia, ou pode limpar o rms ao fim de toda transmissão, eu particularmente juntaria todos os records em um objeto e transmitiria e uma operação só.

Att
Ricoldi

[quote=ricoldi]Se quer ir do começo para o fim porque não faz assim:


            RecordEnumeration en = singleton.rms.enumerateRecords(null, null, true);

            while (en.hasNextElement()) {
              byte[] dados = en.nextRecord();
              /*Seu processamento*/
            }

Acho que isso é o basico para te servir, ja que vc pode pegar tambem o id, para ir apagando conforme envia, ou pode limpar o rms ao fim de toda transmissão, eu particularmente juntaria todos os records em um objeto e transmitiria e uma operação só.

Att
Ricoldi[/quote]

testei fazer da forma que falou mas aconteceu o mesmo problema, retorna sempre o primeiro id como valor zero. Pois reconhece como se estive-se um proximo registro mas não existe.

Bom se quer ir ao contrario, você pode ir correndo para trás.

O método previousRecord() não te serve?

RecordEnumeration en = singleton.rms.enumerateRecords(null, null, true);  

while (en.hasPreviousElement()) {  
   byte[] dados = en.previousRecord();  
   /*Seu processamento*/  
   }  

http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/rms/RecordEnumeration.html

Abraços
Ricoldi