Ir ao conteúdo

Java Como Gravar Objeto Java no Firebase?


Ir à solução Resolvido por Javax,

Posts recomendados

Postado

Olá pessoal!

 

Considerem as seguintes classes:
 

public class Pagamento { }
public class Contrato
{

     private ArrayList<Pagamento> pagamentos;

}
public class Cliente
{
     private ArrayList<Contrato> contratos;
}

 

Com base nessas classes, temos uma situação de aninhamento da seguinte forma:

[code]

> Cliente

      > Contrato

            >Pagamento

[/code]

 

Ocorre que, quando tento gravar o objeto cliente no Realtime Database do Firebase, o terceiro nível não está sendo armazenado.

 

Vejam:

 

public class BancoDAO

{

    public void gravar(ArrayList<Cliente> clientes)
    {        
            FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference myRef = database.getReference().child("clientes");
        
            Map<String, Object> users = new HashMap<>();
        
            for(Cliente cliente : clientes)
            {
                String idCliente1 = UUID.randomUUID().toString();


                cliente.setIdCliente(idCliente1);
                users.put(idCliente1, cliente);
            }
        
            myRef.setValueAsync(users);

    }

}

 

Main.java

public class Main

{

      public static void main(String args[])

      {

            ArrayList<Cliente> clientes = new ArrayList<Cliente>();
            ArrayList<Contrato> contratos = new ArrayList<Contrato>();        
            ArrayList<Pagamento> pagamentos = new ArrayList<Pagamento>();
        
            contratos.add(new Contrato());
            pagamentos.add(new Pagamento());
        
            cliente1.setContratos(contratos);
            cliente1.getContratos().get(0).setPagamentos(pagamentos);


            clientes.add(cliente1);



            BancoDAO bancoDAO = new BancoDAO();

            bancoDAO.gravar(clientes);

      }

}

 

[code]

> clientes

     > 1393a1

            > contratos

                    > 0

                          > valor: 0

[/code]

 

Ou seja, ele gravou o cliente 1393a1, entendeu que tem uma lista de contratos dentro desse cliente, mas não gravou nenhum contrato, e por conseguinte, nenhum pagamento que estaria dentro de contrato.

 

Alguém saberia me orientar o que estou fazendo de errado? Porque na verdade, eu quero armazenar um objeto cliente, que contém uma lista de contratos, onde cada contrato tem uma lista de pagamentos.

Postado
12 horas atrás, Javax disse:

Olá pessoal!

 

Considerem as seguintes classes:
 

public class Pagamento { }
public class Contrato
{
     private ArrayList<Pagamento> pagamentos; // Você criou um arraylist dentro da classe e no main, não entendi
}
public class Cliente
{
     private ArrayList<Contrato> contratos; //Aqui idem
}

 

 

Main.java

public class Main
{
      public static void main(String args[])
      {
            ArrayList<Cliente> clientes = new ArrayList<Cliente>();
            ArrayList<Contrato> contratos = new ArrayList<Contrato>();        
            ArrayList<Pagamento> pagamentos = new ArrayList<Pagamento>();
        
            contratos.add(new Contrato()); //Aqui está adicionando à lista um novo objeto da classe Contrato, zerado.
            pagamentos.add(new Pagamento());//Idem, porém da classe Pagamento.
        
            cliente1.setContratos(contratos); //De onde surgiu esse 'cliente1'? Só vejo 'clientes' sendo declarado.
            cliente1.getContratos().get(0).setPagamentos(pagamentos); //Não mostra nenhum método getContratos(), setPagamentos(), se existem você omitiu aqui, coloque o código inteiro. Se não existem, então essa linha de comando não tem sentido.
      }
}

 

Talvez o que você esteja querendo fazer é inserir objetos com valores já prontos. Nesse caso, vai precisar de construtores para as classes, ou propriedades com valores fixos, e aí dar um 'get' nessas propriedades. Porque por exemplo, nesse trecho abaixo você está tentando inserir o valor de pagamentos de um contrato de um cliente, sendo que esse pagamentos = new Pagamento(), ou seja, é um novo objeto (teoricamente com valores todos zerados, [abre uma caixa e dentro dessa caixa tem uma outra caixa, e dentro dessa outra caixa não tem nada]):

setPagamentos(pagamentos);

 

  • Solução
Postado

Olá, Felipe!

 

Primeiramente, muito obrigado por comentar esse meu post.

 

O problema estava mais precisamente no trecho abaixo, como você indicou:

 

contratos.add(new Contrato()); //Aqui está adicionando à lista um novo objeto da classe Contrato, zerado.
pagamentos.add(new Pagamento());//Idem, porém da classe Pagamento.

 

Ocorre que eu inseri um objeto da classe Contrato e a de Pagamento zerados. Quando eu declarei novo construtor funcionou, conforme abaixo:

 

contratos.add(new Contrato("contrato exemplo", 1000)); //Aqui está adicionando à lista um novo objeto da classe Contrato, zerado.
pagamentos.add(new Pagamento(100));//Idem, porém da classe Pagamento.

 

Realmente, eu esqueci de instanciar o objeto cliente1:

Cliente cliente1 = new Cliente();

 

Os métodos getters e setters das classes Cliente, Contrato e Pagamento, foram abstraídos, assim como também os construtores, mas eu deveria ter especificado eles mesmo, você tem razão.

 

Poderia ter, também, instanciado as listas via construtor e não no método main.

 

Em suma, o meu propósito é realmente inserir um objeto pronto, e isso funcionou corrigindo o detalhe exposto acima.

 

Valeu!

Um abraço!

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!