Home > Net >  Retrieve data from Firebase Realtime Database to display I UIImage
Retrieve data from Firebase Realtime Database to display I UIImage

Time:06-03

I would like to know how to retrieve an image from a link in the Firebase Realtime.. I have set up my UIImageView in my app and linked it to my ViewController, how ever the code that I added doesn't give me error but it doesn't display anything.

My viewcontroller

let userID = Auth.auth().currentUser?.uid
Database.database().reference().child("Users").child(userID!).child("Total Progress").observeSingleEvent(of: .value, with: { snapshot in
    if let url = snapshot.value as? String {
        URLSession.shared.dataTask(with: URL(string: url)!) { [self] data, response, error in
            if error == nil {
                let image = UIImage(data: data!)
                financialLiteracy.image = image
            }
        }.resume()
    }
})

My Firebase Realtime Database

Realtime Database

CodePudding user response:

let userID = Auth.auth().currentUser?.uid
    Database.database().reference().child("Users").child(userID!).child("Total Progress").observeSingleEvent(of: .value, with: { snapshot in
        if let url = snapshot.value as? String {
            URLSession.shared.dataTask(with: URL(string: url)!) { [self] data, response, error in
                if let data = data {
                    DispatchQueue.main.async {
                        let image = UIImage(data: data)
                        self.financialLiteracy.image = image
                    }
                }
                if let error = error {
                    print(error.localizedDescription)
                }
            }.resume()
        }
    })

use main thread for ui updates the second way to get it

 let userID = Auth.auth().currentUser?.uid
        Database.database().reference().child("Users").child(userID!).child("Total Progress").observeSingleEvent(of: .value, with: { snapshot in
            DispatchQueue.global(qos: .background).async {
                if let urlstring = snapshot.value as? String,
                   let url = URL(string: urlstring) {
                    if let data = try? Data(contentsOf: url) {
                        
                        DispatchQueue.main.async {
                            let image = UIImage(data: data)
                            self.financialLiteracy.image = image
                        }
                        
                    }
                    
                }
            }
            
        }
  • Related