如何将嵌套数据检索到java类?

时间:2017-05-15 20:45:44

标签: android firebase firebase-realtime-database

我正在尝试从实时数据库中检索嵌套数据,正常数据正确返回,但嵌套数据返回null。问题可能是我的接收器类。我怎样才能使它发挥作用?

enter image description here

这是我的课程:

接收者类

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;
        }
    }

    }

我的查询结果

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");


                }
}

Monitor中的结果是:

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

参与课程

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;
    }
}

3 个答案:

答案 0 :(得分:2)

您需要创建一个默认构造函数。

在您的Model类中添加:无参数构造函数。

例如: -

公共课参与{

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

答案 1 :(得分:1)

尝试创建一个名为&#34; Participante&#34;,

的类
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;    

   } 

}

在您的班级Auxiliar中,您创建了一个名为&#34; participante&#34;的属性:

public Participante participante; 

另外,创建setter

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

尝试使用

进行访问
auxiliarObj.participante.id_Usuario

答案 2 :(得分:0)

我终于完成了,在cesarsicas的帮助下,我将我的类重建为默认类(Contructor,getters和setter)和no args构造函数。

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;
    }
}

在我的查询接收器中,我找到了从数据快照获取数据的正确方法。

    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");


        }