当前位置: 首页 > 知识库问答 >
问题:

Firebase快照可以正确地检索用户信息,但无法检索个人资料图片-Swift

阮炯
2023-03-14

我得到了一个奇怪的问题与我的快照,其中用户名和电子邮件被获取,但我的快照返回零的个人资料图片。

func displayUserInformation() {

    let uid = Auth.auth().currentUser?.uid
    Database.database().reference().child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in


        if let dictionary = snapshot.value as? [String: AnyObject] {

            self.username.text! = (dictionary["username"] as? String)!
            self.email.text! = (dictionary["email"] as? String)!

            let profileImageUrl =  (dictionary["photoUrl"] as? String)!
            let url = URL(string: profileImageUrl)
            URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
                    if error != nil {
                        print(error!)
                        return
                    }
                    DispatchQueue.main.async {
                        self.profilePicture.image? = UIImage(data: data!)!
                        print(data!)
                    }
                }).resume()


            print(profileImageUrl)
            print(snapshot)
        }
    }, withCancel: nil)
}

快照正在工作,profileUrl确实显示了数据,所以我不知道可能是什么问题。下面是print(profileImageUrl)显示的内容和快照

https://firebasestorage.googleapis.com/v0/b/gastet-4cfd2.appspot.com/o/profileImages%2F031F0B9F-AA41-4C16-8446-CD07893F2CA7.jpg?alt=media&token=c0e07615-8166-40e7-8d92-22bb8fbc8c8e
Snap (wL40cuYrGAVNdCVvCGUhKsD64RH2) {
    email = "ximeft29@gmail.com";
    photoUrl = "https://firebasestorage.googleapis.com/v0/b/gastet-4cfd2.appspot.com/o/profileImages%2F031F0B9F-AA41-4C16-8446-CD07893F2CA7.jpg?alt=media&token=c0e07615-8166-40e7-8d92-22bb8fbc8c8e";
    username = ximeft29;
}

共有1个答案

洪念
2023-03-14

我在一个示例项目中复制了您的示例,并成功地使其能够异步地从URL中获取图片。

我还重写了这个函数,以便更优雅地处理数据的展开。任何问题都可以问!

func displayUserInformation() {

    if let currentUser = Auth.auth().currentUser {

        Database.database().reference().child("users").child(currentUser.uid).observeSingleEvent(of: .value) { (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject],
               let username = dictionary["username"] as? String,
               let email = dictionary["email"] as? String,
               let urlString = dictionary["photoUrl"] as? String,
               let url = URL(string: urlString) {

                self.username.text = username // Set the username
                self.email.text = email // Set the email

                /*
                 * Fetch the image asyncronously
                 */
                URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in

                    if let error = error {
                        print("There was an error fetching the image from the url: \n", error)
                    }

                    if let data = data, let profilePicture = UIImage(data: data) {
                        DispatchQueue.main.async() {
                            self.profilePicture.image = profilePicture // Set the profile picture
                        }
                    } else {
                        print("Something is wrong with the image data")
                    }

                }).resume()
            }
        }
    }
}
 类似资料:
  • 问题内容: 我正在使用Java中的Twitter4J API来检索已登录的Twitter用户的个人资料图像。该命令类似于: 图片大小是多少?例如,如何在标签中显示对象? 问题答案: 好的,答案是: 假设Twitter对象是twitter 1-从twitter对象获取用户 2-获取个人资料图片网址 3-创建图像图标 4-将JLabel图标设置为ImageIcon

  • 这是我用来在代码中检索图片的代码。发送图形请求后,我立即调用此函数。 让upLoadData=尝试数据(内容:URL(fileURLWithPath:“https:/graph.facebook.com/(fbUID)/picture?type=large)))让upLoadImage=UIImage(数据:upLoadData)?。jpeg(低) 然而,这是我得到的错误 错误Domain=nsc

  • 这是我的第二个版本,我试图从Firebase检索代码,并用它做一些事情。这是我的第二种方式: 这将崩溃,并出现错误代码: 未能将类型“__NSCFString”(0x10A77F4A0)的值强制转换为“NSDictionary”(0x10A780288)。在“更新”行。这是我的第一次尝试: 打印更多数据: -路径通道引用:可选(https://x.com/channels/-kegkajavh6u

  • 我尝试使用GitHub API和endpoint检索GitHub用户的成员身份详细信息。 我是多个组织的成员,但我得到的回应是: 所以没有为我的用户显示会员信息。我有一个范围为的访问令牌。我错过什么了吗?我在官方API文档https://developer.github.com/v3/orgs/members/#list-your-organization-memberships中也找不到任何相关

  • 我通过在方法之外添加一个简单的Ride实例来测试它,它工作得很好。 我还尝试将监听器更改为,结果相同。 Edit2:当我试图从数据库中检索整数时,我会得到一条错误消息。

  • 我是Flink的新手,今天我遇到了一个奇怪的情况。 我运行Kafka服务器,然后使用confluent producer发送消息。使用consumer,我得到了正确的信息,但在应用程序中,我不能。我使用此图像设置message broker 我用这个向Kafka服务器发送消息 我发送的消息是 我用这个来听Kafka的留言 这是我的密码 当我将kafka源代码更改为KafkaSource时 user