【问题标题】:Firebase Android how to handle onChildAddedFirebase Android 如何处理 onChildAdded
【发布时间】:2016-06-08 09:57:24
【问题描述】:

如何在 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
        }

当一个新的孩子被添加到我的参考节点时,这个方法就会触发。但是如何在不进行类型转换的情况下获得特定孩子的价值

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

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

String myKey = dataSnapshot.getKey()

对于值:

String myKey = dataSnapshot.getValue(String.class)

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

User myUser = dataSnapshot.getValue(User.class)

更多详情请到Firebase official documentation.

【讨论】:

    【解决方案2】:

    在参考中,添加您的应用程序 Firebase 控制台网址。

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

    【讨论】:

      【解决方案3】:

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

      public void onChildAdded(DataSnapshot dataSnapshot, String s) {
      
             ModelClass model = dataSnapshot.getValue(ModelClass.class)
             //assuming this is used for list of data..
             list.add(model);
      }
      

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-20
          相关资源
          最近更新 更多