RecordFilter não filtra nada, ajudem um pobre coitado! eu!

estou usando RMS
para abrir o banco uso OpenRecordStore
meu filtro:


package hello;
import javax.microedition.rms.RecordFilter;   
  
  public class Filtro implements RecordFilter {   
  
        private String nome = null;   
  
        public Filtro(String nome) 
        {   
            this.nome = nome.toUpperCase();   
        }   
  
        public boolean matches(byte[] pessoa) {  
           
            String dados_procura = new String(pessoa).toUpperCase(); 
            
           // if(nome != null && dados_procura.indexOf(nome)!= -1)
                return (nome != null && dados_procura.indexOf(nome) != -1);
            //else
              //  return false;
                
                
  
               
        }   
    }
    

e chamo a classe assim:

try {
                Filtro rfn = new Filtro("J");    

                RecordStore rs = RecordStore.openRecordStore("clientes",true);  
      
                RecordEnumeration re = rs.enumerateRecords(rfn, null, false);
                    
               
                int i = 1;
             
                String dadosStr = "";
       
                while (re.hasNextElement()) { 
             
                dadosStr = new String(rs.getRecord(i));   
                list.append(dadosStr, null);   //listando resultados em um list
                                                                    
                i++;
                     }
                 
        

              }
                catch(Exception e){
                    
                }
            

o que há de errado?
já passei horas e horas na frente do pc e naum consegui filtrar nada
ele simplesmente mostra todos os registro sem nenhum filtro…

por favorrrrrrrr me ajudemmmmmmmm… tow desesperado!

será que o Neri Aldoir Neitzke da informaticon resolve este problema, rsrsrsrs

No resultado do list sai os nomes das pessoas? Estranho se você escreve nome.getBytes() dentro do rms na hora de voltar o matches tem que ter um byte[] de uma string mesmo.

Pode parecer besta falar isso, mas tentou dar um sout e retornar um false para ver o que imprime e se esta sendo respeitada a regra de retorno. (Vai saber né!!!)

public boolean matches(byte[] pessoa) {   
            System.out.println(new String(pessoa).toUpperCase());
            return false;
}

Ola Joan,
Bom, só hoje tive contato com seu post entao mesmo que seja tardio, como ninguem ainda havia apontado o erro no seu codigo, entao la vai a correçao para quem usar este post como referencia para implementaçao futura:

No segundo bloco de codigo que voce postou, onde intitulou como “e chamo a classe assim:”, mais precisamente na linha 15
voce varre a instancia do enumerateRecords “re” ( while (re.hasNextElement()) { ) e dentro dele voce ao inves de pegar o “re” correspondente, voce pega o RS(record store), ae da chabú mesmo. basta mudar o rs.getRecord(i)) para RE.getRecord(i)).

veja seu codigo:

[/code]

            while (re.hasNextElement()) { 
         
            dadosStr = new String(rs.getRecord(i));   
            list.append(dadosStr, null);   //listando resultados em um list
                                                                
            i++;
            }

[/code]©

Agora veja seu codigo corrigido retornando apenas os itens filtrados:

[/code]©

            while (re.hasNextElement()) { 
         
            dadosStr = new String(re.getRecord(i));   
            list.append(dadosStr, null);   //listando resultados em um list
                                                                
            i++;
            }

[/code]

Falows!!!