从Firebase检索数据。复杂对象的AddValueEventListener

时间:2016-07-13 19:13:21

标签: java android firebase firebase-realtime-database

我正在尝试使用JAVA从Android中的Firebase数据库中读取数据。我有以下数据库:

{
  "info" : {
    "about" : "...........",
    "address" : "...........",
    "bus" : "",
    "contact" : "........",
    "email" : ".........",
    "mobile_phone" : ".........",
    "trolley" : ""
  },
  "schedule" : {
    "47" : {
      "hall" : {
        "id" : 2,
        "name" : "..."
      },
      "presentation" : {
        "about" : "",
        "id" : 1,
        "title" : "....."
      },
      "section" : {
        "id" : 2,
        "name" : ".... "
      },
      "speakers" : [ 101 ],
      "time_end" : 0,
      "time_start" : 1416652800,
      "url" : "......"
    }
  }
}

我可以阅读简单的结构,例如:

ref.child("info").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

       Info msg =dataSnapshot.getValue(Info.class);
       System.out.println(msg.getEmail());  
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

但我不知道如何从结构“计划”中检索数据。我试图重新创建POJO并阅读结构,但它不起作用。

ref.child( "schedule" ).addValueEventListener( new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for ( DataSnapshot postSnapshot : dataSnapshot.getChildren() ) {
            Schedule msg = dataSnapshot.getValue( Schedule.class );
            System.out.println( msg.getHall().getId() );
        }


    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }


} );

1 个答案:

答案 0 :(得分:0)

小错误,只需在for循环中将dataSnapshot更改为postSnapshot,您就可以了。

for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
    Schedule msg = postSnapshot.getValue(Schedule.class);
    System.out.println(msg.getHall().getId());
}

如果问题仍然存在,那么它就是你的POJO。