извлечение данных из базы данных auto id child - PullRequest
0 голосов
/ 12 февраля 2019

Я немного новичок в быстром программировании, мой случай таков:

У меня есть база данных в режиме реального времени FireBase "см. Рисунок", я хочу получить данные firstName и lastName определенногоТолько идентификатор.

enter image description here

например: Когда я нахожусь на экране входа в систему и вошел в систему, используя этот адрес электронной почты: "ali_y_k@hotmail.com",и при переходе к следующему экрану я хочу отобразить firstName и lastName этого email в текстовых полях, показанных на рисунке

Log in Screen

HOme Screen

Я пробовал несколько решений, но проблема всегда заключалась в том, что я не могу ввести случайный идентификатор ребенка, чтобы получить firstName и lastName

есть то, что я пробовал: Первый

func retriveInfo () {

let databaseRef = Database.database().reference().child("User_Informations")

databaseRef.observe(.childAdded) { (snapshot) in

    let snapshotValue = snapshot.value as! Dictionary<String,String>

    let firstName = snapshotValue["firstName"]!
    let lastName = snapshotValue["lastName"]!
    let email = snapshotValue["email"]!

    print(firstName,lastName,email)

  }
}

Это печать всех данных (firstName, lastName, email) с каждого идентификатора


Секунда

func retriveInfo() {

    let databaseRef = Database.database().reference().child("User_Informations")


        databaseRef.observeSingleEvent(of: .value, with: { (snapshot) in

            for snap in snapshot.children {
                let userSnap = snap as! DataSnapshot
                let uid = userSnap.key //the uid of each user
                let userDict = userSnap.value as! [String:AnyObject] //child data
                let firstName = userDict["firstName"] as! String
                let lastName = userDict["lastName"] as! String

                print("key = \(uid) First Name = \(firstName), Last Name = \(lastName)")
            }
        })

При этом будет напечатан каждый ключ "Id" и вся информация

СпасибоВы заранее:)

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Поскольку у вас есть childByAutoId, вы должны использовать упорядоченный запрос и запрос равный.

let reference = Database.database().reference().child("User_Informations").queryOrdered(byChild: "email")
reference.queryEqual(toValue: "ali_y_k@hotmail.com").observeSingleEvent(of: .childAdded) { (snapshot) in
     let dictionary = snapshot.value as! [String : Any]
     let firstName = dictionary["firstName"]
     print(firstName)
}
0 голосов
/ 12 февраля 2019

Вам необходимо использовать текущий идентификатор пользователя после входа в систему

let currentUserUid  = FIRAuth.auth()!.currentUser!.uid
let databaseRef = Database.database().reference().child("User_Informations/\(currentUserUid)") 
databaseRef.observeSingleEvent(of: .value, with: { (snapshot) in
}
...