从Firebase数据库检索数据时,返回<null>:“Snap(...)<null>”

时间:2017-08-16 05:59:06

标签: swift firebase firebase-realtime-database

我是一个相对较新的Swift程序员,并且是第一次使用Firebase,所以请原谅我可能遇到的任何误解以及我对术语缺乏了解。

我正在尝试检索有关存储在数据库中的用户的数据(电子邮件和用户名)。

代码在数据库中成功找到userID。然后使用userID以导航到包含用户名和电子邮件的目录。它将这些值存储在snapshot中。

出于某种原因,当打印snapshot时,它会显示userID,但目录的内容(用户名和密码)显示为<null>。我确定我尝试访问和检索数据的目录是否存在且不为空(它包含用户名和电子邮件)。我希望snapshot存储用户名和电子邮件,但打印显示它没有正确执行,我无法弄清楚原因。

这是我的代码块:

func checkIfUserIsLoggedIn() {
        if Auth.auth().currentUser?.uid == nil {
            perform(#selector(handleLogout), with: nil, afterDelay: 0)
        } else {

            let uid = Auth.auth().currentUser?.uid;
            Database.database().reference().child("Users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
                
                print(snapshot)
                
                if let dictionary = snapshot.value as?[String:AnyObject] {
                    self.userLabel.text = dictionary["name"] as? String
                }
                
                
            }, withCancel: nil)
        }
    }

以下是打印到控制台的内容: Snap (ywU56lTAUhRpl3csQGI8W8WmQRf1) <null>

以下是我尝试访问并登录snapshot的数据库条目: I'm a new Stack Overflow user and don't have enough experience on the site to be allowed to embed images in posts, so this is the external link

感谢阅读,我们非常感谢任何帮助!!

3 个答案:

答案 0 :(得分:3)

您在Firebase中的引用是"users",但您在代码中使用的是.child("Users")。确保您的查找与您的节点匹配大小写。我发现最好创建一个对该节点的引用,并将其用于写入和读取。

let usersRef = Database.Database().reference().child("users")

Snap (ywU56lTAUhRpl3csQGI8W8WmQRf1) <null>括号中的部分指的是您要观察的结束节点。在这种情况下,它指的是uid!

答案 1 :(得分:0)

if u want to get username or email then you make first the model class for 
Example:-


class User: NSObject {
    var name: String?
    var email: String?
}

then user firebase methed observeSingleEvent

    FIRDatabase.database().reference().child("user").child(uid).observeSingleEvent(of: .value, with: { (snapShot) in
                if let dictionary = snapShot.value as? [String: Any]{
            //    self.navigationItem.title = dictionary["name"] as? String
                let user  = User()
                    user.setValuesForKeys(dictionary)
                self.setUpNavigationBarWithUser(user: user)
                }
            })`

答案 2 :(得分:0)

如果没有找到您的询问值,则您询问了错误的目录。检查 firebase db 子名称,它必须与您的代码中的完全相同(“用户”)