Tecnologia do Blogger.
RSS

[androidbrasil-dev] Re: Dúvida Context requerido no construtor do Banco de Dados SQLite.

Utilize getApplicaitonContext() ao invés de getBaseContext() , assim vc utilizará o contexto global da aplicação ao invés do contexto da activity. Por ser ligado à Activity, ao ter sua activity destruída e recriada posteriormente, este contexto vai impedir que a anterior seja coletada pelo GC.

O Contexto é utilizado basicamente para obter dados dos Resources da aplicação, como strings, temas, layouts, etc... A aplicação possui um, e cada Activity também. O Application context não pode ser utilizado para criar componentes visuais, mas pras demais operações é o mais indicado pra evitar leaks como mencionei acima.

Rafael

Em segunda-feira, 26 de novembro de 2012 14h27min44s UTC-2, Guilherme Bernardi escreveu:
Boa tarde pessoal.

Estou desenvolvendo um aplicativo com banco de dados SQLite e é o meu primeiro no caso.
Gostaria de entender algumas coisas que no mínimo são bem iniciantes acredito eu. Se alguém puder me ajudar eu ficarei muito grato.

1 - Já desenvolvi aplicativos antes, mas qual seria a definição exatamente do Context que é muito utilizado em instâncias pelo aplicativo todo e etc?

2 - Agora a dúvida quanto ao SQLite. No construtor do banco de dados, é exigido um parâmetro de context:
 - new DbHelper(context, nomeBanco, factory, versaoBanco, scriptSQLCreate, scriptSQLDelete)

Eu estou trabalhando com uma classe de Persistencia que é responsável pela comunicação com a classe do Banco de Dados e por persistir os dados no banco de dados.

Então no método de Grava() da Persistencia eu criei uma propriedade:
private Context Contexto;

E nas sub-classes por exemplo Pedido, eu criei também uma propriedade de Contexto. Que é carregada no OnCreate da Activity do CadastroPedido, quando a classe é instanciada:
pedido = new Pedido(getBaseContext());

E no método Grava() da classe de Pedido, que faz um Override do método Grava() da classe de Persistencia, eu preencho os atributos da Persistencia incluindo o Contexto:
this.setContexto(this.getContextoPedido());

Após carregar as propriedades da persistencia incluindo o Contexto e chamando o método Grava():
super.Grava();

No método grava() da classe de persistência eu instancio o Banco de dados, passando o contexto carregado na propriedade da persistência, que passei através das classes:
DataBase = new DadosBD(this.getContexto());

E então trabalho com os dados carregados, fazendo inserção, atualização ou deleção dos dados.

Esta é a maneira correta de trabalhar com esse Contexto exigido pelo SQLite?

Se é a maneira correta, estou tendo problemas para passá-lo através de uma classe de implementa Parcelable.

Obrigado desde já.

--
 
 

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

0 comentários:

Postar um comentário