firebase - 首先从表 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();
所以我总是在任何范围内都能看到它
解决方案
首先,据我了解,您可以使用startAt
andendAt
来获得两分钟差异内的值范围。我的意思是,在从 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())){
/...
}
推荐阅读
- rust - 有没有办法将变量重新分配给不同的特征实现?
- jquery - 除非用户滚动,否则延迟操作
- javascript - 为什么“.includes”对循环数组内的对象起作用?
- python - 在使用 PYBIND11_MODULE 时使用 Pybind11 将 C++ 函数集成到 Python 时出错
- python - 无法使用 smtplib 在 Outlook 上的 python 中发送邮件
- wordpress - 如何从子帖子中删除父 slug
- javascript - 用一个 220 插件制作画廊
- typescript - 窥探 electron.BrowserWindow 构造函数并返回一个带有茉莉花的模拟对象
- python - 如何在 Tensorflow 中保存 Tensor 类型的值?
- powerbi - PowerBI SHAPE MAP:一张地图有多个字段可供选择?