2017-05-15 7 views
0

リアルタイムデータベースからネストされたデータを取得しようとしていますが、正常なデータは正常に返されますが、ネストされたデータはnullを返しています。それはおそらく私のレシーバクラスの問題です。どうすればそれを動作させることができますか?入れ子になったデータをJavaクラスに取り込む方法は?

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


       } 
} 

モニタの結果は次のとおりです。

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クラス

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

答えて

0

参加するIついにacomplished、cesarsicasの助けを借りて、私は私のクラスを再構築デフォルトクラス(Contructor、getters、setters)と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("[email protected]").getVnv_data() + " foi muito isso"); 


     } 
1

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;  

    } 

} 

、 "Participante" と呼ばれるクラスを作成して試してみて、自分のクラスAUXILIARに、あなたは "participante" という属性を作成します。

public Participante participante; 

また、セッターを作成する

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

、あなたはデフォルトのコンストラクタを作成する必要が

auxiliarObj.participante.id_Usuario 
+0

私でしたが、私はエラー「com.google.firebase.database.DatabaseExceptionを:クラスinacius.listachamada.Classes.Participantesは、引数なしのコンストラクタが欠落している」です。 – Inacius

+0

たとえば、 – cesarsicas

+0

のようにコンストラクタをインクルードしようとしました。Auxiliarクラスに同じエラーが発生しました。私のParticipantesクラスで質問を更新しました。 – Inacius

2

でアクセスしてみてください。

Modelクラスでは、引数コンストラクタを追加しません。例えば

: -

パブリッククラス{)

国民は(参加{ // no argument constructor } }

+0

同じエラー "com.google.firebase.database.DatabaseException:クラスinacius.listachamada.Classes.Participantesに引数のないコンストラクタがありません"ということを試しました。私はセザルカが言った変更を加えました。 – Inacius

関連する問題