Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] GreenDAO - persistir lista de "filhos"

Valeu Felipe, obrigada mesmo, me desculpe até o incomodo, já percebeu que sou novata no assunto né ;-)
Vou tentar e te retorno.

Até mais.

Em quinta-feira, 9 de janeiro de 2014 17h07min06s UTC-2, Felipe Aron escreveu:
Vamos lá:

Bom, eu uso e recomendo o tratamento isolado dos objetos para gravação no banco de dados, como exemplifiquei no e-mail anterior.

Porém é possível fazer do teu modo, inserindo diretamente os itens no objeto produto, porém é necessário associar um Session() ao objeto. Veja um novo exemplo (fiz o teste aqui):

Pedido pedido = new Pedido();
pedido.__setDaoSession(Dao.getSession(this));
pedido.getItens().add(new PedidoItem());
pedido.getItens().add(new PedidoItem());
pedido.getItens().add(new PedidoItem());
int qtde = pedido.getItens().size();
new AlertaToast(this, String.valueOf(qtde), Toast.LENGTH_SHORT);

...
O Toast() vai mostrar 3 (qtde de itens). Se não associar uma Session ao objeto ele causará o exception.

[ ! ] O Dao.getSession() é uma classe singleton que criei pra gerenciar as conexões no app. e o AlertaToast() é uma classe que criei pra "agilizar" o Toast no projeto. Altere ao seu modo. :D

Espero que isso lhe ajude a clarear mais um pouco!

Se tiver dúvida manda ai, que se eu souber ajudo sem problemas. :D




Em 9 de janeiro de 2014 16:38, Marcela <marcel...@gmail.com> escreveu:
Entendi a lógica.
Mas ainda tem um trecho do código que não atende, no meu caso, que é onde você diz: "populo os itens de acordo com a seleção do usuário".
Não sei como esta a estrutura da sua aplicação, mas o meu "popular" dos itens, está em uma camada diferente do salvar, logo preciso recuperar de alguma forma os itens ja populados e eh nessa parte que estou enroscando, na obtenção do itens populados.
De forma grosseira, hj eu faço assim:

MinhaActivity {
 
.....
 
Pedido p = new Pedido();
  p
.setDescricao("pedido xyz");

 
Item i = new Item();
  i
.setDescricao("item um");
 
...
  lista
.add(i);

 
//e aqui seria minha tentativas, para entao conseguir obeter a lista na classe que faz o insert
  p
.setItem(lista); //mas nao existe este metodo, o greendao nao gera
 
//ou
  p
.getItens().addAll(lista); //mas da erro pq getItens ainda é null
}

Em resumo, minha dificuldade é essa, "passar" a lista para um objeto e tentar recuperá-la no insert.

Obrigada por enquanto.

Em quinta-feira, 9 de janeiro de 2014 14h11min03s UTC-2, Felipe Aron escreveu:
Eu sigo a seguinte "regra" para salvar o pedido:

Tenho 2 objetos:

Pedido pedido = new Pedido();
List<PedidoItem> Itens = new ArrayList<PedidoItem>();

Ao salvar, eu preencho os dados do pedido e populo os itens de acordo com a seleção do usuário.

1) Salvo o pedido --  long id = ...session().getPedidoDao().insert(pedido);

Inserindo o pedido já tenho id do mesmo.

2) Agora só alimentar o idPedido no filho e salva-lo:

for (PedidoItem item : lItens) item.setIdPedido(id);

...session().getPedidoItemDao().insertinTx(lItens);

Se carregar o pai novamente os filhos estarão lá.

O greenDao apesar de possuir relações master/detail ele trata cada tabela/classe de forma separada, e relações sempre trata apenas como leitura. O que havia dito no email anterior realmente está errado.



Em 9 de janeiro de 2014 13:57, Marcela <marcel...@gmail.com> escreveu:

Ola Felipe,
mesmo alterando conforme sua sugestão cai no mesmo erro, pois ao passar pelo getItens() da classe pedido ele continua nulo e a exceção eh lancada:

 public List<Item> getItens() {
       
if (itens == null) {
           
if (daoSession == null) {

               
throw new DaoException("Entity is detached from DAO context");
           
}
...





Em quinta-feira, 9 de janeiro de 2014 13h36min55s UTC-2, Felipe Aron escreveu:
Marcela não existe SET para lista "filho", porém existe o método addAll() no GET

Exemplo:

List<PedidoItem> lItens = new ArrayList<PedidoItem>();
pedido.getItens().addAll(lItens);

Lembrando que ao salvar no DB, é preciso salvar tanto o pai quanto filho. Somente um Insert() no pai não incluirá os filhos.


Em 9 de janeiro de 2014 11:25, Marcela <marcel...@gmail.com> escreveu:
Olá Pessoal,
estou com dificuldade para persistir uma lista de filhos no objeto pai, quando mando inserir o pai.getListaFilhos() esta nullo, porem o greendao nao me gerou o metodo
pai.setListaFilhos(...), como que a magia acontece? Em que momento o pai recebe a lista de filhos?

filho.setNome("Ana");
filhos
.add(filho);
...

pai
.setNome("Jose");
pai
.setFilho(filho);
...

/*antes de fazer o insert, segundo a API (http://greendao-orm.com/documentation/relations/), devo fazer um get da Lista: 1. Get the to-many Java List */

List filhos = pai.getFilhos();

/* mas ao fazer o getFilhos() cai no erro: */

throw new DaoException("Entity is detached from DAO context");




Obrigada


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.



--
سمووحخ ̷̴̐ خ ̷̴̐ خ ̷̴̐ خ امارتيخ ̷̴̐ خ
Analista-Programador

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
سمووحخ ̷̴̐ خ ̷̴̐ خ ̷̴̐ خ امارتيخ ̷̴̐ خ
Analista-Programador

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
سمووحخ ̷̴̐ خ ̷̴̐ خ ̷̴̐ خ امارتيخ ̷̴̐ خ
Analista-Programador

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

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

0 comentários:

Postar um comentário