【问题标题】:How to store Firebase data in array and print them out?如何将 Firebase 数据存储在数组中并打印出来?
【发布时间】:2017-01-05 19:45:59
【问题描述】:

我一直试图将 firebase 数据存储到一个数组中并整天打印出来,但无济于事。我将非常感谢社区的帮助。

下图是当前 firebase 数据库的样子:

下面是从 firebase 读取数据的函数的代码:

- (void)readDataFromServer {

_ref = [[FIRDatabase database] reference];

_hotelRef = [_ref child:@"hotel bookings"];

NSString *userID = [FIRAuth auth].currentUser.uid;

FIRDatabaseQuery *userHotelBookingsQuery = [[_hotelRef child:userID] queryOrderedByChild:@"number"];

[userHotelBookingsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    if (snapshot.value == [NSNull null]) {

        NSLog(@"No messages");

    } else {

    [self.arrayOfBookingDetail removeAllObjects];

    self.arrayOfBookingDetail = (snapshot.value);

    NSString *firstMessage = [self.arrayOfBookingDetail objectAtIndex:0];

    NSLog(@"First message is: %@", firstMessage);

    }


 }];

}

【问题讨论】:

  • 向您的问题添加代码而不是图像!
  • 你想读数据还是写数据???你的功能是关于读取数据......所以你基本上想要什么
  • 道歉,我不知道社区更喜欢实际代码而不是图像。我会做这些改变。我将要读取数据,插入数组,然后显示它们。

标签: ios firebase firebase-realtime-database


【解决方案1】:

您的代码失败,因为您正在通过用户 uid 获取孩子,而该用户实际上并不存在。 K2xxxxxxxx 是每个元素的唯一字符串,不对应于用户 ID。试试这个

_ref = [[FIRDatabase database] reference];

_hotelRef = [_ref child:@"hotel bookings"];

FIRDatabaseQuery *userHotelBookingsQuery = [_hotelRef queryOrderedByChild:@"number"];

[userHotelBookingsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    if (snapshot.value == [NSNull null]) {
        NSLog(@"No messages");
    } else {
      //[self.arrayOfBookingDetail removeAllObjects];
      //self.arrayOfBookingDetail = (snapshot.children);
      //NSString *firstMessage = [self.arrayOfBookingDetail objectAtIndex:0];
      //NSLog(@"First message is: %@", firstMessage);
      NSDictionary *allUsersData = (NSDictionary*)snapshot.value;
      for (NSString *key in allUsersData.allKeys) {
           NSLog("@key is %@, data is %@",key,allUsersData[key]);
      }
    }

 }];

}

编辑:

要查询特定用户 - 将查询更改为

 FIRDatabaseQuery *userHotelBookingsQuery = [[_hotelRef queryOrderedByChild:@"userID"] queryEqualToValue:@"GEmxxxxxxxxx"];

【讨论】:

  • 我明白了。在上面的数据库图像中,它显示了不同用户的酒店预订列表。我想查询特定用户的所有酒店预订。
  • 我尝试运行您提供的代码,NSLog 正在返回“第一条消息为:Null”。我不知道为什么。
  • 谢谢。在我的逻辑流程中,我不知道哪个用户将登录。这就是为什么我使用 NSString *userID = [FIRAuth auth].currentUser.uid;检索当前登录用户,返回他/她的酒店预订记录。
  • 没明白吗?请解释更多。
  • 我认为硬编码用户 ID @"GEmxxxxxxxxxx" 不明智。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多