Consultar Floggy

Pessoal eu tenho um metodo de busca usando o floggy e tenho uma lista q uso o LWUIT para as minhas views, sendo oq ta acontencendo q eu nao estou conseguindo pegar o item desta lista, toda vez q tento pegar ele sempre mim traz o primeiro da lista. PORFAVOR HELP!!! :oops:

AGRADECO TODOS VCS DESDE JA

AKI EU CHAMO MEU METODO DE CONSULTAR

 public void actionPerformed(ActionEvent e) {
           if(e.getSource() == voltar){
            OpenWindow.showMenu();

            } else if (e.getSource() == consultarDadosAberta) {
              
              //TENTO PEGAR O ID AKI
                int id  = list.getSelectedIndex();
                    
                 Os pegarOs = new Os();
               
                    try {
                       
                        pegarOs = os.consultarDadoAberta(id);
                        System.out.println(pegarOs);


                    } catch (FloggyException ex) {
                        ex.printStackTrace();
                    }

                OpenWindow.showDetalheAberta();
}

MEU FORM ONDE EU TRAGO A LISTA


 public Form CreateForm(){
   
        try {
            osMobileIcon = Image.createImage("/osMobilePequeno.png");
            osMobileBackground = Image.createImage("/backgroundCompleto.png");
        } catch (Exception e) {
            System.out.println("Erro ao adicionar a imagem : " + this.getClass());
        }

        //formListar = new Form("Listagem OS Aberta");
        this.setLayout(new BorderLayout());
        this.setBgImage(osMobileBackground);

       
        this.addCommandListener(this);
        //formListar.getTitleStyle().setBgColor(0xff8040);
        Label ImagemLabel = new Label(osMobileIcon);
        this.addComponent(BorderLayout.NORTH ,ImagemLabel);

        this.addCommand(voltar);
        this.addCommand(consultarDadosAberta);
        this.addCommand(deletarDadoEscolhido);

         ListModel model = new DefaultListModel(os.listarOSEmAberta());

         list.setModel(model);
              
      
       this.addComponent(BorderLayout.CENTER,list);

        return this;
    }

MEU METODO DE CONSULTAR ONDE EU PASSO ID COMO PARAMENTRO

 //consultar um dado e detalhar
    public Os consultarDadoAberta(int id) throws FloggyException {

        Os osbjeto = new Os();

        try {

            PersistableManager.getInstance().load(osbjeto, id);

            System.out.println(osbjeto.toString());


        } catch (FloggyException e) {
        }
        return osbjeto;
    }

Bom dia Maxdavis.

Acredito que o método LOAD do floggy não é o mais apropriado pra vc nesse momento. Se não me engano esse método recupera um objeto através do seu id (id criado pelo RMS e não id do seu objeto, nem o índice que ele se encontra na lista).

Caso você esteja populando sua lista LWUIT com o Objeto, basta vc recuperar o objeto através do método list.getSelectedObject(), pegar o seu id (ou qualquer outro atributo que vc deseje utilizar para recuperá-lo do banco).
Caso você esteja populando sua lista LWUIT apenas com o nome (ou outro atributo desse objeto Os), basta vc recuperá-lo da lista e repassar ao método consultarDadoAberta().

Você também deverá utilizar o método find() de PersistableManager para recuperar os objetos do RMS. Com ele vc pode utilizar um filtro para pegar apenas a informação que precisa, ou se você achar mais fácil, pode recuperar todos os objetos e compará-los em um loop.

Bom, acho q é isso.

Se eu me enganei, por favor alguém me corrija.

Abraço.

Mas no caso eu coloco uma lista, como mostra meu metodo abaixo. Daria pra fazer dessa forma?

 //metodo de listar OS Em Aberta
    public Vector listarOSEmAberta() {
        ObjectSet ose = null;
        //Gera um filtro
        EmAbertaFilter filtro = new EmAbertaFilter();
        Vector listarOSEmAberta = new Vector();

        try {
            ose = PersistableManager.getInstance().find(Os.class, filtro, null);
            for (int i = 0; i < ose.size(); i++) {
                Os objetoOs = (Os) ose.get(i); //obtem as instancias do banco
                listarOSEmAberta.addElement(objetoOs.getCod() + " - " + objetoOs.getDescricao());
            }
        } catch (FloggyException ex) {
            listarOSEmAberta.addElement("Erro list record");
        }
        return listarOSEmAberta;
    }

Valeu rafdutra! Foi melhor trabalhar com o Objeto, eu tb tava erado na hora de listar e adcionar os meus itens no meu List. SEGUE MEU CODIGO ABAIXO

Minha Classe Form

public class Listar_OsAberta extends Form implements ActionListener {

    //private Form formListar;
    private Image osMobileIcon;
    private Image osMobileBackground;
    Vector listaAberta;
    List list;
    ListModel model;
    Os os = new Os();
    Form formLista;
    Form formDetalhe;
    private Command voltar = new Command("Voltar", 1);
    private Command detalharListaOSAberta = new Command("Detalhar", 0);
    private Command atenderOsAberta = new Command("Atender OS", 0);

    public Listar_OsAberta() {
      
        super("Listagem OS Aberta");
        model = new DefaultListModel();
        list = new List(model);

        //NAO ESQUECER DE TIRAR ESSE METODO QUANDO FAEZR INTEGRACAO COM O XML
        Os.gerarDadosParaTesteAberta();
        Os.gerarDadosParaTesteAberta1();


        listaAberta = os.listarOSEmAberta();
        for (int i = 0; i < listaAberta.size(); i++) {
            Os objetoOs = (Os) listaAberta.elementAt(i); //obtem as instancias do banco
            model.addItem(objetoOs.getCod() + " - " + objetoOs.getDescricao());
        }

    }

    public Form CreateForm() {
        formLista = new Form();
        try {
            osMobileIcon = Image.createImage("/osMobilePequeno.png");
            osMobileBackground = Image.createImage("/backgroundCompleto.png");
        } catch (Exception e) {
            System.out.println("Erro ao adicionar a imagem : " + this.getClass());
        }

        //formListar = new Form("Listagem OS Aberta");
        formLista.setLayout(new BorderLayout());
        formLista.setBgImage(osMobileBackground);


        formLista.addCommandListener(this);
        //formListar.getTitleStyle().setBgColor(0xff8040);
        Label ImagemLabel = new Label(osMobileIcon);
        formLista.addComponent(BorderLayout.NORTH, ImagemLabel);

        formLista.addCommand(voltar);
        formLista.addCommand(detalharListaOSAberta);
        formLista.addComponent(BorderLayout.CENTER, list);

        return formLista;
    }

    public Form CreateFormDetalhe() {
        formDetalhe = new Form();
        try {
            osMobileIcon = Image.createImage("/osMobilePequeno.png");
            osMobileBackground = Image.createImage("/backgroundCompleto.png");
        } catch (Exception e) {
            System.out.println("Erro ao adicionar a imagem : " + this.getClass());
        }

        //formListar = new Form("Listagem OS Aberta");
        formDetalhe.setLayout(new BorderLayout());
        formDetalhe.setBgImage(osMobileBackground);
     
         mostrarDados();

        formDetalhe.addCommandListener(this);
        //formListar.getTitleStyle().setBgColor(0xff8040);
        Label ImagemLabel = new Label(osMobileIcon);

        formDetalhe.addComponent(BorderLayout.NORTH, ImagemLabel);
        formDetalhe.addCommand(voltar);
        formDetalhe.addCommand(atenderOsAberta);

        return formDetalhe;
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == voltar) {
            OpenWindow.showMenu();

        } else if (e.getSource() == detalharListaOSAberta) {

            os = (Os) listaAberta.elementAt(model.getSelectedIndex());
            
            CreateFormDetalhe().show();
        } 
    }
    
    public void mostrarDados( ){
       TextArea dados = new TextArea("Verificar a Os Detalhada \n" +
                "Cod: " + os.getCod() +
                "\n Cliente: "+ os.getCliente().getNome() +
                "\n Telefone: " + os.getCliente().getTelefone()+
                "\n Data: " + os.getDataAbertura()+
                "\n Status: " + os.getStatus() +
                "\n Descricao da Os:\n" + os.getDescricao()+
                "");
        dados.setEditable(false);
        dados.setEnabled(true);
        formDetalhe.addComponent(BorderLayout.CENTER, dados);

  
    }

Meu Metodo de Listar!

  //metodo de listar OS Em Aberta
    public Vector listarOSEmAberta() {
        ObjectSet ose = null;
        //Gera um filtro
        EmAbertaFilter filtro = new EmAbertaFilter();
        Vector listarOSEmAberta = new Vector();

        try {
           ose = PersistableManager.getInstance().find(Os.class, filtro, null);
            for (int i = 0; i < ose.size(); i++) {
                Os objetoOs = (Os) ose.get(i); //obtem as instancias do banco
                listarOSEmAberta.addElement(objetoOs);
            }
        } catch (FloggyException ex) {
            listarOSEmAberta.addElement("Erro list record");
        }
        return listarOSEmAberta;
    }

[quote=maxdavis]Pessoal eu tenho um metodo de busca usando o floggy e tenho uma lista q uso o LWUIT para as minhas views, sendo oq ta acontencendo q eu nao estou conseguindo pegar o item desta lista, toda vez q tento pegar ele sempre mim traz o primeiro da lista. PORFAVOR HELP!!! :oops:

AGRADECO TODOS VCS DESDE JA

AKI EU CHAMO MEU METODO DE CONSULTAR

 public void actionPerformed(ActionEvent e) {
           if(e.getSource() == voltar){
            OpenWindow.showMenu();

            } else if (e.getSource() == consultarDadosAberta) {
              
              //TENTO PEGAR O ID AKI
                int id  = list.getSelectedIndex();
                    
                 Os pegarOs = new Os();
               
                    try {
                       
                        pegarOs = os.consultarDadoAberta(id);
                        System.out.println(pegarOs);


                    } catch (FloggyException ex) {
                        ex.printStackTrace();
                    }

                OpenWindow.showDetalheAberta();
}

MEU FORM ONDE EU TRAGO A LISTA


 public Form CreateForm(){
   
        try {
            osMobileIcon = Image.createImage("/osMobilePequeno.png");
            osMobileBackground = Image.createImage("/backgroundCompleto.png");
        } catch (Exception e) {
            System.out.println("Erro ao adicionar a imagem : " + this.getClass());
        }

        //formListar = new Form("Listagem OS Aberta");
        this.setLayout(new BorderLayout());
        this.setBgImage(osMobileBackground);

       
        this.addCommandListener(this);
        //formListar.getTitleStyle().setBgColor(0xff8040);
        Label ImagemLabel = new Label(osMobileIcon);
        this.addComponent(BorderLayout.NORTH ,ImagemLabel);

        this.addCommand(voltar);
        this.addCommand(consultarDadosAberta);
        this.addCommand(deletarDadoEscolhido);

         ListModel model = new DefaultListModel(os.listarOSEmAberta());

         list.setModel(model);
              
      
       this.addComponent(BorderLayout.CENTER,list);

        return this;
    }

MEU METODO DE CONSULTAR ONDE EU PASSO ID COMO PARAMENTRO

[code]
//consultar um dado e detalhar
public Os consultarDadoAberta(int id) throws FloggyException {

    Os osbjeto = new Os();

    try {

        PersistableManager.getInstance().load(osbjeto, id);

        System.out.println(osbjeto.toString());


    } catch (FloggyException e) {
    }
    return osbjeto;
}

[/code][/quote]

e performance? Estou usando um código semelhante, mas estou sofrendo com problemas de performance.

Eu fiz alguns testes com vetores diferentes, mais específicos, para melhorar a performance e adiantou. Em vez de consultar um vetor só “único”, separei em vários vetores por categoria. Claro que uma consulta no geral (em todos juntos) ainda demora.