Reputation: 23
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?
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
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
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
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