获取存储在 firebase 中的数据值

Posted

技术标签:

【中文标题】获取存储在 firebase 中的数据值【英文标题】:Getting the values of data stored in firebase 【发布时间】:2016-09-21 14:47:56 【问题描述】:

我正在尝试访问存储在 firebase 仪表板中的值,以便在类中的不同函数和方法中使用它们。

I used this method in this question

我试图打印他们的值,整个应用程序崩溃了,它给了我他们的 nil!

它们实际上不是零! 我在 viewDidLoad 中使用了类似的方法,我可以将值检索到标签!

let refer = FIRDatabase.database().reference().child("UserDevices")

var globalEmail : String!
var globalPhone : String!
var globalImageUrl: String!


override func viewWillAppear(_ animated : Bool)
    super.viewWillAppear(animated)
    retrieveUserData(email,phone,ImageUrl) in
        self.globalEmail = email
        self.globalPhone = phone
        self.globalImageUrl = ImageUrl
    



func retrieveUserData(_ completionBlock : @escaping ((_ email : String?, _ phone : String?, _ ImageUrl: String?)->Void))
    refer.child(byAppendingPath: self.strUserid as String).observe(.value , with: snapshot in
        if let userDict =  snapshot.value as? [String:AnyObject]  
            completionBlock(userDict["email"] as! String, userDict["phone"] as! String, userDict["ImageUrl"] as! String)
        
    )


var strUserid : NSString!
override func viewDidLoad() 
    super.viewDidLoad()

    print(globalEmail)
    print(globalImageUrl)
    print(globalPhone)

    self.navigationController?.navigationBar.tintColor = UIColor.white

    print("idis \(self.strUserid)")

     let ref = FIRDatabase.database().reference().child("UserDevices")

     self.navigationController?.navigationBar.tintColor = UIColor.white
    ref.child(byAppendingPath: self.strUserid as String).observe(.value, with:  snapshot in

        if let dict = snapshot.value as? NSMutableDictionary

            print("dict is \(dict)")

            if let Provider = dict["name"] as? String
            
                self.DeviceDetailsProvider.text = Provider
               // self.navigationItem.title = Provider
            
            if let name = dict["DeviceName"] as? String
            
                self.DeviceDetailsName.text = name
                self.navigationItem.title = name
            
            if let ShortDescription = dict["Description"] as? String
            
                self.DeviceDetailsDescription.text = ShortDescription
            
            if let City = dict["city"] as? String
            
                self.DeviceDetailsCity.text = City
            

        
    )


   self.DeviceDetailsImageView.downloadedFrom(link: globalImageUrl)


为什么我会在这里崩溃!

【问题讨论】:

哪一行崩溃了?提到它在哪里工作和在哪里崩溃! 没有特定的行。但是整个应用程序崩溃 整个应用崩溃是什么意思? 【参考方案1】:

更改ref.child(byAppendingPath: self.strUserid as String)

收件人:-

ref.child(self.strUserid)

同时删除let refer = FIRDatabase.database().reference().child("UserDevices")

你不能在一个范围之外全局初始化你的引用,因为你不知道你的类被初始化的顺序,并且可能的情况是你的 FIRDatabase 甚至还没有被初始化你尝试初始化let refer

retrieveUserData 中的 refer 使用

FIRDatabase.database().reference().child("UserDevices")

您在 viewControllerLIFE CYCLE 中看到,viewdidLoadviewWillAppear 被调用之前: p>

所以你需要的是:-

override func viewDidLoad() 
 super.viewDidLoad()
  ..
   retrieveUserData(email,phone,ImageUrl) in
    self.globalEmail = email
    self.globalPhone = phone
    self.globalImageUrl = ImageUrl
     self.DeviceDetailsImageView.downloadedFrom(link: globalImageUrl)
    // .. Do your stuff...

       

  

阅读:Viewcontroller's Lifecycle

【讨论】:

我在检索值时仍然遇到问题! 你在这儿吗? 尝试在self.DeviceDetailsImageView.downloadedFrom(link: globalImageUrl) 之前打印您的全局变量并检查您是否获得了这些值。如果没有,请检查您的参考路径和您的数据库。

以上是关于获取存储在 firebase 中的数据值的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中将 Firebase 数据作为 Listview 构建器获取

带有 Google 操作的 Firebase 存储

Firebase:Vue.js:无法将存储与数据库连接

如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值

需要帮助将firebase中的数据转换为string []数组。尝试了所有可用的方法,但坚持只获取最后一个值

Cloud Functions for Firebase - 在一天中的特定时间更新值,每天 [重复]