Firebase Android如何处理onChildAdded

时间:2016-06-08 09:57:25

标签: android firebase firebase-realtime-database

如何在firebase android中处理onChildAdded事件。 下面是我的数据库json结构

 {
    message{
            "id"=10;
            "name"="xyz"
           }
 }

    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

           // how can I handle the particular child that has added
        }

将新子项添加到参考节点时会触发此方法。但是如何通过类型转换获得特定孩子的价值

4 个答案:

答案 0 :(得分:3)

添加的子项是dataSnapshot上返回的子项。所以,如果你想得到它的关键:

String myKey = dataSnapshot.getKey()

对于值:

String myKey = dataSnapshot.getValue(String.class)

对于您需要定义您期望的类型的值。在这个例子中,我指定了一个String,但你甚至可以将值转换为你正在使用的任何对象(只要字段在你的对象模型和dataSnapshot上匹配):

User myUser = dataSnapshot.getValue(User.class)

有关详细信息,请转到Firebase official documentation.

答案 1 :(得分:1)

在参考中,添加您的应用程序firebase控制台URL。

DatabaseReference myFirebaseRef = database.getReference("Your firbase path");
    myFirebaseRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        if(dataSnapshot.hasChild("message")) {
        for (DataSnapshot poly : dataSnapshot.child("message").getChildren()) {
            String id=String.valueOf(poly.child("id").getValue);
            String name=String.valueOf(poly.child("name").getValue);

        }
    }
         }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) 
         {

        }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

答案 2 :(得分:1)

根据数据库中的子节点和实体,您将需要一个模型类。

public void onChildAdded(DataSnapshot dataSnapshot, String s) {

       ModelClass model = dataSnapshot.getValue(ModelClass.class)
       //assuming this is used for list of data..
       list.add(model);
}

即使子节点不可用或不是动态创建的,子事件侦听器也不会崩溃。您也不需要任何循环即可移动到下一个节点。

答案 3 :(得分:0)

如果您只想获取特定的子值,请执行此操作

  public void onChildAdded(DataSnapshot dataSnapshot, String s) {
           if(dataSnapshot.hasChild("name")){
              String name = dataSnapshot.child("name").getValue().toString();
           }
        }