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

问题描述

如果我有 2 个表,该怎么办:从 table-1 我得到我想要的所有用户,然后,在我得到用户 ID 列表之后,我想将每个用户与当前用户与在上找到的字段进行比较表 2。第一个任务很简单,我只有一个onDataChange用他们的 id 填充用户列表。但是现在我有了这个列表,如何迭代每个用户,并根据表 2 中的特定字段将其与当前用户进行比较。

我目前尝试的是使用 for 循环迭代列表中的每个用户,每个用户都onDataChange调用 table-2,然后填充必要的数据集。但是当这个 for 循环结束时,这个数据集就不再可见了。我希望我在这篇文章中试图实现的目标是可以理解的。

我将尝试用表格进行演示:

假设我根据以下内容从表 1 中获取用户列表data1

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

现在我有 3 个用户的列表:uid20, uid30, uid44. user1然后,我需要根据另一个字段(时间戳)将用户列表与当前用户(称为它)从表 1 进行比较。我的意思是,在我拥有用户列表之后,我想过滤这些用户以获得接近当前用户的时间戳,最长可达一定时间。因此,在我的示例中,我只想拥有当前用户时间戳 2 分钟内的用户。

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

但是每次都有超出新听众范围的东西,而且看起来这不是正确的程序。也许我首先需要在本地保存在 table-1 上找到的内容?或者,它可以以某种方式纯粹通过 Firebase 调用来完成?

**这是一些代码:

获取当前用户很容易:

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

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

标签: firebasefirebase-realtime-database

解决方案


首先,据我了解,您可以使用startAtandendAt来获得两分钟差异内的值范围。我的意思是,在从 table-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())){
/...
}

推荐阅读