java - 为了过滤时间,我可以在 firebase 实时数据库中做什么?

标签 java android firebase-realtime-database time filter

当我将数据发送到 Firebase 实时 Firebase 时,我想连续从 Firebase 实时数据库获取过去 10 分钟的数据。我尝试了很多方法,但没有成功。

查询

query=database.getReference("handler").child("first").orderByChild("time").startAt(start).endAt(finish);query.addValueEventListener(new ValueEventListener()...

最佳答案

您可以从“10 分钟前”开始(在创建查询时计算),并维护自己的计时器以实现应用的“仅最后 10 分钟”逻辑。

例如,如果您收到一个 8 分钟大的 child ,请添加一个计时器以在 2 分钟后“忘记”该 child 。如果已经为您提供了超过 10 分钟的子级(如果您的查询已经运行了一段时间,如果稍后将它们写入数据库,您仍然会收到较旧的子级),请忽略它。

如果性能不是问题,您只需每隔几秒运行一次检查即可删除当时超过 10 分钟的所有项目。

您可能会发现使用子事件监听器而不是值事件监听器更容易执行此操作(这样就不会在每次更改时重复为您提供旧的子事件)。

如果您打算长时间保持查询处于 Activity 状态,您可能需要重新启动它,以停止接收年龄较大的子项。

如果您有权访问项目的云函数,并且不需要太精确,而且您正在读取的路径在所有用户中都是通用的,您可以尝试其他方法:安排云函数(每 1 或 2 分钟)以维护一个不同的路径,该路径仅包含大约 10 分钟前的项目,并让 Android 客户端从该路径读取。

调度功能文档:https://firebase.google.com/docs/functions/schedule-functions

关于java - 为了过滤时间,我可以在 firebase 实时数据库中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438998/

相关文章:

java - gradle 测试文件的常规文件系统路径

Android 谷歌地图自定义标记

ios - Firebase 安全规则 : All Read Single Property?

java - 无法将 java.lang.String 类型的对象转换为 com.rafaquarta.whatsapp.model.Usuario 类型

java - 强制重新加载 IntelliJ 中的环境变量...无需重新启动?

java - 没有检查 JCheckBox 就触发了 MouseListener

java - 如何使用 spring 管理的事务性 EntityManager 执行自定义 SQL 查询

android - 在 LinearLayout 上仅添加顶部和底部边框

Android MediaPlayer 在 API 21 上失败(但不是 API 19 或 22!)

ios - 跨数据库更新用户名