如何从 Firebase Realtime DB 读取孩子的值?

Posted

技术标签:

【中文标题】如何从 Firebase Realtime DB 读取孩子的值?【英文标题】:How to read values of a child from Firebase Realtime DB? 【发布时间】:2022-01-03 07:22:02 【问题描述】:

我正在尝试从我的数据库中获取值。但是,我没有成功。这是数据库的样子:

这是我尝试做的,读取值:

    taskRef = Database.database().reference(withPath: "Tasks").child(titleOfTask)

    taskRef?.observeSingleEvent(of: .childAdded, with:  (snapshot) in
         if let taskDict = snapshot.value as? [String:Any] 
            print("Printing ---------> ",taskDict["Description"] as Any)
         
    )

但什么也没发生。理想情况下,我想将不同变量中的描述和到期日期都读入不同的变量中。


需要了解的重要事项:

"Tasks"是..你可以把它想象成一个表名。 Alpha、Bravo、Jalabi...等都是"Task Names""Tasks" 的子代 描述、到期日是值

【问题讨论】:

【参考方案1】:

您在 JSON 中将侦听器附加到 /Tasks/$titleOfTask,例如 /Tasks/Alpha。该侦听器要求为/Tasks/Alpha 的第一个child 节点调用,因此代码中的snapshot 将指向/Tasks/Alpha/Description。当您随后打印taskDict["Description"] 时,您正在打印不存在的/Tasks/Alpha/Description/Description 的值。

最简单的解决方法是监听.value 事件:

taskRef?.observeSingleEvent(of: .value, with:  (snapshot) in
     if let taskDict = snapshot.value as? [String:Any] 
        print("Printing ---------> ",taskDict["Description"] as Any)
     
)

现在snapshot 拥有来自/Tasks/Alpha 的所有数据,因此taskDict["Description"] 最终成为来自/Tasks/Alpha/Description 的值。

【讨论】:

以上是关于如何从 Firebase Realtime DB 读取孩子的值?的主要内容,如果未能解决你的问题,请参考以下文章

在单个 Activity 中使用 2 个或更多 Firebase Realtime DB

当单值事件或事务的嵌套 ValueEventListener 失败时,如何在 Firebase Realtime DB for Android 中回滚到以前的状态?

Flutter firebase realtime db 在规则中使用 displayName

在明确删除之前,SingleValueEvent 侦听器是不是计入 Firebase RealTime DB 中的“同时连接”?

我正在使用 Firebase RealTime DB .. 我想做的就是让所有用户的分数为零

如何使用以 TypeScript for Firebase Realtime 数据库编写的云函数从 onCreate 触发以外的节点获取数据?