【问题标题】:How to add a new node dynamically in firebase real-time database如何在firebase实时数据库中动态添加新节点
【发布时间】:2020-11-11 12:52:16
【问题描述】:

Firebase 数据库的新手。以下是我的数据库的结构:

    Cart-List
        |
        |-UserCarts
            |
            |- 2020-11-11  ( using dateformat :yyyy-MM-dd)
            |     |
            |     | -items
            |          |- productCode
            |          |- price 
            |- 

  1. 按如下方式创建节点:

    FirebaseDatabase.getInstance().getReference().child("Cart-List").child("UserCarts")

  2. 如何在 UserCarts 下添加新节点(比如 2020-11-11)?

    在添加这个新节点之前,有没有办法检查这个节点是否已经创建?

这将使我能够轻松地按日期查找项目。也许这会减少计算时间从而减少费用?

谢谢

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    当您使用以下参考时:

    FirebaseDatabase.getInstance().getReference().child("Cart-List").child("UserCarts")
    

    这意味着您创建的架构如下所示:

    Firebase-root
      |
      --- Cart-List
            |
            --- UserCarts
    

    如果您需要在树的较低级别写入数据,则需要再添加几个.child() 调用。假设您要在items 节点下写入数据,则引用应如下所示:

    val itemsRef = FirebaseDatabase.getInstance().getReference()
        .child("Cart-List")
        .child("UserCarts")
        .child("2020-11-11")
        .child("items");
    

    要记住的一点是,Firebase 中的键是always 字符串。如果要存储日期,将其存储为时间戳会更方便。因此,将时间戳添加为对象的属性会更有帮助,正如我在以下帖子中的回答中所解释的那样:

    在添加这个新节点之前,有没有办法检查这个节点是否被创建?

    如果要检查节点是否存在,则需要附加一个监听器,如下代码行:

    val valueEventListener = object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if(dataSnapshot.exists()) {
                //Do what you need to do
            }
        }
    
        override fun onCancelled(databaseError: DatabaseError) {
            Log.d("TAG", databaseError.getMessage()) //Don't ignore potential errors!
        }
    }
    itemsRef.addListenerForSingleValueEvent(valueEventListener)
    

    对于 Java 用户:

    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) {
                //Do what you need to do
            }
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
        }
    };
    itemsRef.addListenerForSingleValueEvent(valueEventListener);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2019-08-30
      • 2021-10-04
      • 2019-10-11
      • 1970-01-01
      • 2021-01-31
      相关资源
      最近更新 更多