Jason Singh
Jason Singh

Reputation: 75

Firebase query for specific user information is not working. How can I resolve this issue?

I have written a firebase query that searches for the level of a user and then changes the level-label on the view controller. However, this query is giving me level for the first user in my Firebase db instead of the level for the current user. How can I resolve this issue?

@IBOutlet weak var levelLabel: UILabel!

var refUser:DatabaseReference?

override func viewDidLoad() {
    super.viewDidLoad()
    refUser = Database.database().reference().child("userInfo");

    let userID = Auth.auth().currentUser!.uid
    let query = refUser?.queryOrdered(byChild: "userId").queryEqual(toValue: "\(userID)")
    query?.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children {
            let childSnap = child as! DataSnapshot
            var dict = childSnap.value as! [String: Any]
            let level=dict["level"] as! String
            self.levelLabel.text=level
        }
    })

}

Photo of Firebase DB

enter image description here

Upvotes: 1

Views: 51

Answers (1)

Aleksey Shevchenko
Aleksey Shevchenko

Reputation: 1241

try in such way:

query?.observeSingleEvent(of: .value, with: { snapshot in
    guard let values = snapshot.value as? [String: Any], 
      let level = values["level"] as? String else {
      return
    }

    DispatchQueue.main.async {
      self.levelLabel.text = level
    }
})

Upvotes: 1

Related Questions