首先从表1获取用户列表,然后通过表2中的特定字段与当前用户进行比较

时间:2018-12-27 10:14:31

标签: firebase firebase-realtime-database

如果我有2个表,该怎么办:从表1中,我得到所有想要的用户,然后,在获得用户ID列表之后,我想将每个用户与当前用户进行比较。字段见表2。第一项任务很容易,我只有一个onDataChange,可使用其ID填充用户列表。但是,既然有了这个列表,如何遍历每个用户,并根据表2中的特定字段将其与当前用户进行比较。

我当前尝试的是使用for循环在列表中的每个用户都具有对表2的onDataChange调用的情况下进行迭代,然后填充必要的数据集。但是,当此for循环结束时,该数据集不再可见。 我希望我在这篇文章中尝试实现的目标是可以理解的。

我将尝试使用表进行妖精化

假设我基于data1从表1中获得了用户列表:

table-1
   |
   |_____data1
           |____uid20
           |____uid30
           |____uid44

现在我有3个用户的列表:uid20uid30uid44。然后,我需要根据另一个字段(时间戳)将表1中的用户列表与当前用户进行比较,将其称为user1。我的意思是,在获得用户列表之后,我想过滤这些用户以使其时间戳接近当前用户,并且持续一定的时间。因此,在我的示例中,我只希望拥有距离当前用户时间戳2分钟以内的用户。

table-2
  |
  |______uid1    
  |        |____timestamp: <some_timestamp>
  |
  |______uid20  
  |        |____timestamp: <some_timestamp>
  |
  |______uid30  
  |        |____timestamp: <some_timestamp>
  |
  |______uid44
           |____timestamp: <some_timestamp>

但是每次新侦听器超出范围时,看起来也不是正确的过程。也许我首先需要本地保存表1中的内容?还是可以完全通过Firebase调用来完成?

**这是一些代码:

获取当前用户很容易:

final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final String userId = user.getUid();

所以我总是在任何范围内都能看到它

1 个答案:

答案 0 :(得分:1)

首先,据我了解,您可以使用startAtendAt在相差两分钟之内获得一系列值。我的意思是说,在从表2中获取每个值之前,您只能获取与您的用例匹配的值,在这种情况下,该值是当前时间戳记的2分钟。

例如,在您的表2中,我将这样查询:

ref.orderByChild('timestamp').startAt(yourCurrentTimeStamp).endAt(yourCurrentTimeStamp+120000);

其中120000是 2秒(以毫秒为单位)

,然后遍历此元素时,我将使用getKey来获取此查询过滤的值的每个键,因此,我将仅获取相差2分钟的用户,然后将它们与您执行的第一个for循环进行比较以查看它们是否匹配。

要比较2个用户ID,您可以使用equals,因为它是一个字符串:

if(snapshotUserTable1.getKey().equals(snapshotUserTable2.getKey())){
/...
}