Concordo com o Pedro.
Eu sempre retorno objetos e listas para trabalhar a interface. Cursores apenas dentro das classes de acesso ao DB sempre fechando os cursores.
Fazendo dessa forma não terá problemas na aplicação.
Em 21 de dezembro de 2012 13:40, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:
----Utilize objetos, carregue os objetos com os dados que você precisa, feche o cursor e retorne-os.Amigo,Jamais trabalhe com cursores fora da classe de acesso a dados.
Abraços,
Pedro Subutzki
__________________________________________HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi
Em 20 de dezembro de 2012 15:49, Guilherme Bernardi <gui.bernardi09@gmail.com> escreveu:Boa tarde pessoal.Eu estou tendo alguns problemas com cursores de estarem permanecendo abertos e etc.E estou analisando novamente a estrutura. Estou com dúvida de alguns pontos que eu mesmo havia feito aqui, acredito que não seja o correto para se trabalhar gostaria de uma opinião até porque é a primeira vez que estou trabalhando com o SQLite, por isso montei a estrutura dessa maneira inicialmente.Eu tenho uma classe DadosBD:Que contém métodos ExecSelect, ExecInsert e por ai vai abaixo um exemplo de um desses métodos:public Cursor ExecSelect(String tableName, String[] tableColumn, String select, String[] selectArgs, String groupBy, String having, String orderBy){Cursor = database.query(tableName, tableColumn, select, selectArgs, groupBy, having, orderBy);return Cursor;}E tenho minha classe de Persistencia que é responsável por receber os dados e controlar os Status da aplicação e persistir no SQLite, minha dúvida é por exemplo eu tenho o método CarregaTodos() que busca todos os dados de uma determinada entidade:public Cursor CarregaTodos(){DataBase = new DadosBD(this.getContexto());RsAtual = DataBase.ExecSelect(Tabela, TabelaColunaComposta, TabelaSelecao, TabelaSelecaoArgumentos, TabelaGroupBy, TabelaHaving, TabelaOrderBy);if(RsAtual.moveToNext()){return RsAtual;} else{return null;}}Eu estou utilizando este método para me retornar um Cursor com todos os dados de uma determinada entidade, então por exemplo vou pegar a Classe de FormaPagamento por exemplo:Dentro dela eu faço o Override do método da Persistencia@Overridepublic Cursor CarregaTodos(){this.Status = eStatus.CarregaTodos;this.setTabela(this.getClass().getSimpleName());this.setTabelaOrderBy("Codigo");return super.CarregaTodos();}Retornando o próprio Cursor para ser trabalhado.E ai eu recebo este Cursor na minha Activity conforme necessidade para trabalhar com os dados dele:cursorFormaPagamento = formaPagamento.CarregaTodos();
Minha dúvida seria é correto fazer essa transição de cursor, até porque pelo que estou analisando ficará difícil controlar o close dos cursores dessa maneira...Eu vi que tem um pessoal que recebe o cursor e transforma em um List de dados e com isso já fecha o cursor. Essa seria a maneira mais indicada?Obrigado desde já.--
Analista-Programador






0 comentários:
Postar um comentário