Android firebase查询等价性

Android firebase查询等价性,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在我的Android应用程序中,我需要比较两个Firebase数据库查询对象的等价性。我是否有办法根据数据库引用和查询参数断言两个查询对象是等效的 查询类的Javascript Firebase版本具有一个isEqual()方法,该方法可生成所需的行为。 我在Android代码中尝试了以下等价性测试,但这并没有产生预期的行为: Reference ref = Firebase.getInstance(); String child = "childKey"; //this is a valid

在我的Android应用程序中,我需要比较两个Firebase数据库查询对象的等价性。我是否有办法根据数据库引用和查询参数断言两个查询对象是等效的

查询类的Javascript Firebase版本具有一个isEqual()方法,该方法可生成所需的行为。

我在Android代码中尝试了以下等价性测试,但这并没有产生预期的行为:

Reference ref = Firebase.getInstance();
String child = "childKey"; //this is a valid child of ref
Query query1 = ref.child(child).limitTo(10);
Query query2 = ref.child(child).limitTo(10);
query1 == query2 //false
query1.equals(query2) //false
这似乎有效

query1.zzWM().toString.equals(query2.zzWM().toString) // true
不过我觉得你不需要这个。就我所知,只要引用上有侦听器,Firebase就会将结果缓存。因此,即使您有2个,它也只能从缓存版本中获取,但我可能错了。

这似乎有效

query1.zzWM().toString.equals(query2.zzWM().toString) // true

不过我觉得你不需要这个。就我所知,只要引用上有侦听器,Firebase就会将结果缓存。因此,即使您有2个,它也只能从缓存版本中获取,但我可能错了。

您是否尝试过
orderByChild(child.equalsTo)(无论什么)
?或者我认为您应该获取这两个数据,并在它们都完全获取时进行比较。我希望在查询对象上断言相等,而不是它们包含的数据。通过这样做,我可以避免不必要的网络电话。对不起,前面的问题是模棱两可的。我已经更新了。嗨,来自Firebase团队的Doug。这实际上是查询的equals()实现中的一个已知问题。我积极参与了一项建议,希望以您想要的方式实现此功能,但最终确定这实际上是一个破坏性的API更改,这意味着这是一个很难解决的问题。您是否尝试过
orderByChild(child).equalsTo(无论什么)
?或者我认为您应该获取这两个数据,并在它们都完全获取时进行比较。我希望在查询对象上断言相等,而不是它们包含的数据。通过这样做,我可以避免不必要的网络电话。对不起,前面的问题是模棱两可的。我已经更新了。嗨,来自Firebase团队的Doug。这实际上是查询的equals()实现中的一个已知问题。我积极参与了一项提案,希望能够以您想要的方式工作,但最终确定这实际上是一个破坏性的API更改,这意味着这是一个很难解决的问题。谢谢您的帮助。返回的字符串包含数据库路径和查询参数。这正是我想要的。黑客的方法,但它会做的工作。我正在使用的Firebase SDK版本中的query.zzVd().toString()。这可能会在将来中断,因为该zzWM方法名称已被proguard混淆,并且不能保证在每个版本中都是相同的。谢谢您的帮助。返回的字符串包含数据库路径和查询参数。这正是我想要的。黑客的方法,但它会做的工作。我正在使用的Firebase SDK版本中的query.zzVd().toString()。这可能会在将来中断,因为该zzWM方法名称已被proguard混淆,并且不能保证在每个版本中都相同。