Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Trabalhar com Cursores, repassando entre Classes e Activities.

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:
Amigo,
Jamais trabalhe com cursores fora da classe de acesso a dados.
Utilize objetos, carregue os objetos com os dados que você precisa, feche o cursor e retorne-os.

--
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

@Override
public 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

--
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário