Inacius
Inacius

Reputation: 23

How to retrieve nested data to a java class?

I´m trying to retrieve a nested data from real time database, the normal data it´s returning correctly, But the nested data is returning null. The problem it´s probably my receiver class. How can I make it work?

enter image description here

And this are my classes:

Receiver class

public class Auxiliar {

    private int ID_Evento;
    private int ID_Usuario_Criou;
    private String Codigo;
    private String Complemento;
    private String Data_Inicio;
    private String Data_Fim;
    private String Hora;
    private String Local;
    private String Nome_Evento;
    //public Participantes participantes;
    private HashMap<String, Participantes> participantesMap = new HashMap<>();

    public int getID_Evento() {
        return ID_Evento;
    }

    public int getID_Usuario_Criou() {
        return ID_Usuario_Criou;
    }

    public String getCodigo() {
        return Codigo;
    }

    public String getComplemento() {
        return Complemento;
    }

    public String getData_Inicio() {
        return Data_Inicio;
    }

    public String getData_Fim() {
        return Data_Fim;
    }

    public String getHora() {
        return Hora;
    }

    public String getLocal() {
        return Local;
    }

    public String getNome_Evento() {
        return Nome_Evento;
    }

    public void setID_Evento(int ID_Evento) {
        this.ID_Evento = ID_Evento;
    }

    public void setID_Usuario_Criou(int ID_Usuario_Criou) {
        this.ID_Usuario_Criou = ID_Usuario_Criou;
    }

    public void setCodigo(String codigo) {
        Codigo = codigo;
    }

    public void setComplemento(String complemento) {
        Complemento = complemento;
    }

    public void setData_Inicio(String data_Inicio) {
        Data_Inicio = data_Inicio;
    }

    public void setData_Fim(String data_Fim) {
        Data_Fim = data_Fim;
    }

    public void setHora(String hora) {
        Hora = hora;
    }

    public void setLocal(String local) {
        Local = local;
    }

    public void setNome_Evento(String nome_Evento) {
        Nome_Evento = nome_Evento;
    }

    public HashMap<String, Participantes> getParticipantesMap() {
        return participantesMap;
    }

    public void setParticipantesMap(HashMap<String, Participantes> participantesMap) {
        this.participantesMap = participantesMap;
    }

    public class HashMap<String, Participantes>   {
        private int id_Usuario;
        private int vnv;
        private String vnv_data;

        public int getId_Usuario() {
            return id_Usuario;
        }

        public int getVnv() {
            return vnv;
        }

        public String getVnv_data() {
            return vnv_data;
        }

        public void setId_Usuario(int id_Usuario) {
            this.id_Usuario = id_Usuario;
        }

        public void setVnv(int vnv) {
            this.vnv = vnv;
        }

        public void setVnv_data(String vnv_data) {
            this.vnv_data = vnv_data;
        }
    }

    }

My query result

childEventListener = new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                    Log.d("Entrou","VEio algo "+dataSnapshot.getKey());



                    Auxiliar auxAgenda = dataSnapshot.getValue(Auxiliar.class);

                    Log.d("Eventos que veio",auxAgenda.getNome_Evento()+" foi isso");
                    Log.d("Eventos que veio nested",auxAgenda.getParticipantesMap().getVnv_data() + " foi muito isso");


                }
}

The result in Monitor is:

05-15 20:44:54.805 21711-21711/inacius.listachamada D/Eventos que veio: Futebol foi isso
05-15 20:44:54.805 21711-21711/inacius.listachamada D/Eventos que veio nested: null foi muito isso

Participantes class

public class Participantes {
    private int id_Usuario;
    private int vnv;
    private String vnv_data;

    public Participantes(int id_Usuario, int vnv, String vnv_data) {
        this.id_Usuario = id_Usuario;
        this.vnv = vnv;
        this.vnv_data = vnv_data;
    }

    public Participantes(){

    }

    public int getId_Usuario() {
        return id_Usuario;
    }

    public void setId_Usuario(int id_Usuario) {
        this.id_Usuario = id_Usuario;
    }

    public int getVnv() {
        return vnv;
    }

    public void setVnv(int vnv) {
        this.vnv = vnv;
    }

    public String getVnv_data() {
        return vnv_data;
    }

    public void setVnv_data(String vnv_data) {
        this.vnv_data = vnv_data;
    }
}

Upvotes: 0

Views: 86

Answers (3)

Inacius
Inacius

Reputation: 23

I finally acomplished, with the help of cesarsicas, I rebuild my class as default class (Contructor, getters and setters) and a no args constructor.

public class Auxiliar {

    private int ID_Evento;
    private int ID_Usuario_Criou;
    private String Codigo;
    private String Complemento;
    private String Data_Inicio;
    private String Data_Fim;
    private String Hora;
    private String Local;
    private String Nome_Evento;
    //public Participantes participantes;
    public Map <String, Participantes> participantesMap = new HashMap<>();


    public Auxiliar(int ID_Evento, int ID_Usuario_Criou, String codigo, String complemento, String data_Inicio, String data_Fim, String hora, String local, String nome_Evento, Map<String, Participantes> participantesMap) {
        this.ID_Evento = ID_Evento;
        this.ID_Usuario_Criou = ID_Usuario_Criou;
        Codigo = codigo;
        Complemento = complemento;
        Data_Inicio = data_Inicio;
        Data_Fim = data_Fim;
        Hora = hora;
        Local = local;
        Nome_Evento = nome_Evento;
        this.participantesMap = participantesMap;
    }

    public Auxiliar(){

    }

    public int getID_Evento() {
        return ID_Evento;
    }

    public int getID_Usuario_Criou() {
        return ID_Usuario_Criou;
    }

    public String getCodigo() {
        return Codigo;
    }

    public String getComplemento() {
        return Complemento;
    }

    public String getData_Inicio() {
        return Data_Inicio;
    }

    public String getData_Fim() {
        return Data_Fim;
    }

    public String getHora() {
        return Hora;
    }

    public String getLocal() {
        return Local;
    }

    public String getNome_Evento() {
        return Nome_Evento;
    }

    public void setID_Evento(int ID_Evento) {
        this.ID_Evento = ID_Evento;
    }

    public void setID_Usuario_Criou(int ID_Usuario_Criou) {
        this.ID_Usuario_Criou = ID_Usuario_Criou;
    }

    public void setCodigo(String codigo) {
        Codigo = codigo;
    }

    public void setComplemento(String complemento) {
        Complemento = complemento;
    }

    public void setData_Inicio(String data_Inicio) {
        Data_Inicio = data_Inicio;
    }

    public void setData_Fim(String data_Fim) {
        Data_Fim = data_Fim;
    }

    public void setHora(String hora) {
        Hora = hora;
    }

    public void setLocal(String local) {
        Local = local;
    }

    public void setNome_Evento(String nome_Evento) {
        Nome_Evento = nome_Evento;
    }

    public Map<String, Participantes> getParticipantes() {
        return participantesMap;
    }

    public void setParticipantes(Map<String, Participantes> participantes) {
        this.participantesMap = participantes;
    }
}

And in my query receiver I found the right way to get the data from the datasnapshot.

    childEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            Log.d("Entrou","VEio algo "+dataSnapshot.getKey());



            Auxiliar auxAgenda = dataSnapshot.getValue(Auxiliar.class);


            Log.d("Eventos que veio",auxAgenda.getNome_Evento()+" foi isso");
            Log.d("Eventos que veio nested",auxAgenda.participantesMap.get("inacio_17").getVnv_data() + " foi muito isso");
            //Log.d("Eventos que veio nested",auxAgenda.participantesMap.get("brunopminacio@gmailcom").getVnv_data() + " foi muito isso");


        }

Upvotes: 0

cesarsicas
cesarsicas

Reputation: 467

try create a class called "Participante",

public class Participante{

    int id_Usuario;
    int vnv;
    String vnv_data;


   public Participante (){ // no argument constructor } 


   public Participante (int id_Usuario, int vnv, String vnv_data){ 
      this.id_usuario = id_Usuario;
      this.vnv = vnv;  
      this.vnv_data = vnv_data;    

   } 

}

and in your class Auxiliar, you create an attribute called "participante":

public Participante participante; 

Also, create setter

 public void setParticipante(Participante participante) {
        this.participante = participante
    }

And try access with

auxiliarObj.participante.id_Usuario

Upvotes: 1

Dany
Dany

Reputation: 71

You need to create a default constructor.

In your Model class add : no argument constructor.

For example :-

public class Participate {

public Participate (){ // no argument constructor } }

Upvotes: 2

Related Questions