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

3 respostas
joan

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!

3 Respostas

joan

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

ricoldi

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;
}
P

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++;
            }

©

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++;
            }

Falows!!!

Criado 28 de outubro de 2009
Ultima resposta 24 de abr. de 2010
Respostas 3
Participantes 3