【问题标题】:how to parse a firebase FDataSnapshot object?如何解析 Firebase FDataSnapshot 对象?
【发布时间】:2014-08-04 04:09:16
【问题描述】:

我的代码从 firebase 检索结构化数据,但我不清楚如何从 firebase 数据对象中获取每个值。我在stackoverflow上没有找到答案,我在这里为其他初学者发布问题和答案。

我的 firebase 快照对象值:

{
    "08AD8779-6EEB-4449-BC77-78A661ADA72E" =     {
        field1 = "to device id";
        field2 = "text message";
    };
    "EB841471-618C-4C52-8AA0-C20AD2C947AC" =     {
        field1 = "to device id";
        field2 = "text message";
    };
} 

如何将设备ID(例如“08AD8779-6EEB-4449-BC77-78A661ADA72E”)和“field1”和“field2”的值分配给NSString变量?

【问题讨论】:

  • 您使用什么语言工作?如果您共享用于从 Firebase 获取数据的代码,也可能会有所帮助。
  • 每个 SDK 的指南中都包含检索数据,例如:web、iOS、Android 和 REST。您是否遇到了此处未涵盖的问题?
  • 加藤,我在ios SDK指南上花了很多时间,很清楚如何获取数据(对象)的快照,但没有找到如何提取每个字段的值目的。我从 firebase 示例代码中挖掘了答案,在 stackoverflow 上发布了问题/答案,以便下一个人更容易找到。

标签: ios objective-c swift firebase


【解决方案1】:

以下是对我有用的代码:

-(void)readFirebaseData {
    // Read data and react to changes
    [self.myRootRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {

        for (FDataSnapshot* childSnap in snapshot.children) {
            NSString* otherDeviceName = childSnap.name;
            NSLog(@"otherDeviceName -> %@", childSnap.name);
            NSLog(@"otherDeviceField1 -> %@", childSnap.value[@"field1"]);
            NSLog(@"otherDeviceField2 -> %@", childSnap.value[@"field2"]);
        }     
    }];
}

【讨论】:

  • 您好,您知道如何快速实现这一目标吗?
  • 嗨 Rom_j,我不知道如何在 swift 中做到这一点(我还没有开始学习 swift)。
  • 这个答案已经过时了
【解决方案2】:

希望这会有所帮助。FDataSnashot 上没有 name 属性,因此将其假定为带有键名的值。

        for childSnap in  snapshot.children.allObjects as [FDataSnapshot]{
            let otherDeviceName = childSnap.value["name"] as NSString
            println("otherDeviceName -> \(otherDeviceName)");
            let field1 = childSnap.value["field1"]
            let field2 = childSnap.value["field2"]
            println("otherDeviceField1 -> \(field1)");
            println("otherDeviceField2 -> \(field2)");
        }

【讨论】:

    【解决方案3】:

    其他答案还可以,但如果有人想要一个带有错误识别的干净结构:SnapshotParser

    下面的代码对于获得一个完全工作的 swift 表示是必要的:

    func main(){
        let devices=SnapshotParser().parseAsList(snap: Snapshot, type: Device.self)
    }
    
    class Device: ParsableSnapshot {
        var id: String?
        var field1:String?=nil
        var field2:String?=nil
    
        required init(){}
    
        func bindProperties(binder: SnapshotParser.Binder) {
            binder.bindField(name: "id", field: &id)
            binder.bindField(name: "field1", field: &field1)
            binder.bindField(name: "field2", field: &field2)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 2018-05-30
      • 2016-06-09
      • 2014-03-26
      • 2021-08-14
      • 2012-09-28
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多