【问题标题】:How to update a specific node based on another node in firebase realtime database android [closed]如何根据firebase实时数据库android中的另一个节点更新特定节点[关闭]
【发布时间】:2020-01-06 21:12:59
【问题描述】:

我有两个父节点和一些子节点。当我尝试从一个节点更新一个子节点时,另一个子节点也应该更新。例如,当我从一个节点更新 time_slot(子节点)09:00AM 到 10:00AM 时,它也应该反映在另一个节点中。 就像在 sql 数据库中的外键概念一样。如果我们更新一个主键值,那么它将在另一个引用它的表中更新

【问题讨论】:

  • 请发布您到目前为止尝试过的内容。
  • 如果您在一份文件中有适当的参考,那么很容易做到。
  • 15783... 是随机生成的 id 吗?
  • 是随机生成@frankenstein

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 是一个 noSQL 数据库。所以你不能指望这里有 SQL 类型的行为。 您可以在这里做的是直接从您的移动应用程序更新两个节点。第二种选择是使用 Cloud Functions 来触发数据库事件。

了解云功能请到this

【讨论】:

    【解决方案2】:

    要同时更新两者,请尝试以下操作:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Requests").child("1578311274538")
    DatabaseReference timeRef = FirebaseDatabase.getInstance().getReference().child("TimeSlot").child("01").child("01");
    Map<String, Object> updates = new HashMap<String,Object>();
    Map<String, Object> timeUpdates = new HashMap<String,Object>();
    updates.put("time_slot", newdate);
    timeUpdates.put("time_slot", newdate);
    
    ref.updateChildren(updates);
    timeRef.updateChildren(timeUpdates);
    

    基本上,使用updateChildren() 来更新firebase 中的数据。这是唯一的方法,您需要引用需要更新的属性上方的键。

    【讨论】:

    • 我认为他不会发送硬编码的子参考。它需要在某个地方。以上代码适用于单笔交易
    • 子引用将自动生成 id @Ashish
    • @KarthickJai 在创建新文档时将另一个文档的 id 保存在其中并使用新字段,然后就可以了
    • @Peter Haddad 将尝试您的解决方案并让您知道
    • @Ashish 你能给我发代码,如果我们创建新节点并保存另一个节点的 id,如何同时更新它
    【解决方案3】:

    您需要为RequestTimeSlot 创建模型类。

        var firebaseApp =FirebaseApp.initializeApp(chatActivity)
        var firebaseDatabase=  FirebaseDatabase.getInstance()
        var Db=firebaseDatabase?.getReference().child("Request").addValueEventListener(object :ValueEventListener{
            override fun onCancelled(p0: DatabaseError) {
    
            }
    
            override fun onDataChange(p0: DataSnapshot) {
                //p0 have all the data off Request node 
                //now we will fetch its childern
                for (request in p0.children)
                {
                  var requestModel=timeMsg.getValue(RequestModel::class.java) as RequestModel
                 //requestModel have the all the data of 157...
    
                 }
            }
        })
    

    您可以为所有请求制作列表。

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多