使用动态当前时间戳查询 firebase 数据
Query firebase data with dynamically current timestampt
我有这样的数据:
+ item1
|---- date : 1512008295000
|---- etc : etc
我使用此查询从当前时间戳开始获取数据
Query query = Utils.getFirebaseDb().getReference()
.child("registration")
.child(mUser.getUid())
.orderByChild("date")
.startAt(DateTime.now().getMillis());
然而,DateTime.now().getMillis()
总是在变化,
假设我在 1512008080000
即 2017 年 11 月 30 日 2:14:40 查询此项目,我将获得 date : 1512008295000
的项目,即 2017 年 11 月 30 日 2:18:15 , 然后 5 分钟后,我仍然得到带有 date : 1512008295000
的项目,即使当前时间戳是 1512008380000
或 November 30, 2017 2:19:40.
如何使用动态更改的当前时间戳进行查询。
也许这不是您问题的答案,但我认为这是解决您问题的方法。
首先,添加标识项目日期已过的新节点,如下所示
+ item1
|---- date : 1512008295000
|---- passed : false
|---- etc : etc
然后将您的查询更改为:
Query query = Utils.getFirebaseDb().getReference()
.child("pendaftaran")
.child(mUser.getUid())
.orderByChild("passed")
.equalTo(false);
然后在你的 onBindViewHolder
上检查日期是否已过,然后将 passed
值更改为 true 如果它已过:
@Override
protected void onBindViewHolder(YourHolder holder, int position, Model model) {
boolean passed = model.getDate() < DateTime.now().getMillis();
if (passed) {
getRef(position).child("passed").setValue(true);
}
}
或者如果您不再需要传递的项目,只需将其删除
getRef(position).removeValue();
有了这个,您不需要创建额外的节点,您仍然可以使用日期对查询进行排序。
无法将动态时间戳传递到 Firebase 数据库查询中。如果您想动态删除项目,可以 或者 定期更改查询 and/or 从本地显示中删除过时的项目。
我有这样的数据:
+ item1
|---- date : 1512008295000
|---- etc : etc
我使用此查询从当前时间戳开始获取数据
Query query = Utils.getFirebaseDb().getReference()
.child("registration")
.child(mUser.getUid())
.orderByChild("date")
.startAt(DateTime.now().getMillis());
然而,DateTime.now().getMillis()
总是在变化,
假设我在 1512008080000
即 2017 年 11 月 30 日 2:14:40 查询此项目,我将获得 date : 1512008295000
的项目,即 2017 年 11 月 30 日 2:18:15 , 然后 5 分钟后,我仍然得到带有 date : 1512008295000
的项目,即使当前时间戳是 1512008380000
或 November 30, 2017 2:19:40.
如何使用动态更改的当前时间戳进行查询。
也许这不是您问题的答案,但我认为这是解决您问题的方法。
首先,添加标识项目日期已过的新节点,如下所示
+ item1
|---- date : 1512008295000
|---- passed : false
|---- etc : etc
然后将您的查询更改为:
Query query = Utils.getFirebaseDb().getReference()
.child("pendaftaran")
.child(mUser.getUid())
.orderByChild("passed")
.equalTo(false);
然后在你的 onBindViewHolder
上检查日期是否已过,然后将 passed
值更改为 true 如果它已过:
@Override
protected void onBindViewHolder(YourHolder holder, int position, Model model) {
boolean passed = model.getDate() < DateTime.now().getMillis();
if (passed) {
getRef(position).child("passed").setValue(true);
}
}
或者如果您不再需要传递的项目,只需将其删除
getRef(position).removeValue();
有了这个,您不需要创建额外的节点,您仍然可以使用日期对查询进行排序。
无法将动态时间戳传递到 Firebase 数据库查询中。如果您想动态删除项目,可以 或者 定期更改查询 and/or 从本地显示中删除过时的项目。