Tecnologia do Blogger.
RSS

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

Entendi, obrigado Rafael.


Eu estou com um problema na passagem do context para uma classe que implementa Parcelable.

Eu só consegui fazer a classe manter a propriedade Context preenchida se eu setá-la através do método Grava() da classe de Pedido e passando o Contexto carregado na classe do Pedido.

for(int i = 0; i < this.getItensCount(); i++) {
this.Itens.get(i).setContextoPedidoItem(this.getContextoPedido());
this.Itens.get(i).Grava();
}

Acredito que é por causa da classe estar implementando Parcelable.
Eu tenho a propriedade de Contexto na Classe PedidoItem.

Só que nos métodos:

public PedidoItem(Parcel in) {
// TODO Auto-generated constructor stub
this.setNumero(in.readInt());
this.setItem(in.readInt());
this.setTipoVenda(in.readInt());
this.setProduto(in.readString());
this.setQtde(in.readFloat());
this.setValor(in.readFloat());
this.setDesconto(in.readFloat());
this.setAcrescimo(in.readFloat());
this.setQtdeAmarelo(in.readFloat());
this.setQtdeAzul(in.readFloat());
this.setQtdeRosa(in.readFloat());
this.setQtdeVerde(in.readFloat());
}

e

@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeInt(this.getNumero());
dest.writeInt(this.getItem());
dest.writeInt(this.getTipoVenda());
dest.writeString(this.getProduto());
dest.writeFloat(this.getQtde());
dest.writeFloat(this.getValor());
dest.writeFloat(this.getDesconto());
dest.writeFloat(this.getAcrescimo());
dest.writeFloat(this.getQtdeAmarelo());
dest.writeFloat(this.getQtdeAzul());
dest.writeFloat(this.getQtdeRosa());
dest.writeFloat(this.getQtdeVerde());
}

Não estou encontrando uma forma de passar a propriedade do tipo Context para o Parcel. Então ela é zerada após isso ficando null.

Já utilizou Parcelable, ou sabe como posso resolver isto?

On Monday, November 26, 2012 3:32:40 PM UTC-2, rafael...@novaprolink.com.br wrote:
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