首页 文章

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

提问于
浏览
1

我是一个相对较新的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>

这是我试图访问的数据库条目并登录到 snapshotI'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

感谢阅读,任何帮助将不胜感激!

2 回答

  • 2

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

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


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

  • 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)
                    }
                })`
    

相关问题