首页 > 解决方案 > 如何每 5 秒在 Firebase 上获取数据?

问题描述

我正在编写 Android 应用程序 - 用户可以跟踪其他人的位置。每个用户每 5 秒发送一次他们的 gps 坐标,但是每次将位置保存在数据库中时都会获取有关其他用户的数据,因此onChildChanged监听器中的 firebase 触发器功能。我也想每 5 秒获取一次数据,否则会很昂贵。

假设我们有三个用户使用我的应用程序:

用户 A 在 5:00:03 开始​​发送他的位置。用户 B 在 5:00:06 开始发送他的位置 - 比用户 A 晚了三秒。

在 5:00:08 用户 A 更新坐标,用户 B 在 5:00:11 执行相同操作。

用户 C 在 5:00:00 开始监听位置变化。在 5:00:03 - 接收关于用户 A 的更新。在 5:00:03 - 接收关于用户 B 的信息。 5:00:08 - 接收关于用户 A 的更新。 5:00:11 - 接收关于用户 B 的信息。

在 11 秒内,用户 C 收到许多更新,onChildChanged当任何用户的位置发生变化时,用户 C 的应用程序上的功能每次都会工作。

预期的行为将是这样的:

5:00:00 - 用户 C 开始收听。5:00:05 - 用户 C 收到关于用户 A 位置的信息。5:00:10 - 用户 C 收到有关用户 A 和用户 B 的信息。

所以我需要每 5 秒接收一次数据,而不是每次数据更改。

我想知道,我必须每五秒添加一次新的监听器,然后获取数据,然后删除监听器?还是我需要使用 firebase 功能?

标签: androidfirebasefirebase-realtime-database

解决方案


每 5 分钟调用一次 API 并不是一个好习惯。您可以将用户位置更改事件从一台设备发送到服务器,然后在您的应用程序上进行检查。您可以使用侦听器。

或者使用.keepSynced查询功能。

final Query query = firebase.child("node1").child("node2");
query.keepSynced(true);

推荐阅读