【问题标题】:Android firebase query equivalenceAndroid firebase 查询等价
【发布时间】:2017-03-03 08:04:57
【问题描述】:

在我的 Android 应用程序中,我需要比较两个 Firebase 数据库查询对象的等价性。我有什么方法可以根据它们的数据库引用和查询参数断言两个查询对象是等价的吗?

Query 类的 Javascript Firebase 版本有一个 isEqual() 方法,可以产生所需的行为。 https://firebase.google.com/docs/reference/js/firebase.database.Query

我在我的 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

【问题讨论】:

  • 你试过orderByChild(child).equalsTo(whatever)吗?或者我认为您应该获取这两个数据并在它们都完全获取时进行比较。
  • 我想在 Query 对象上断言 equals 而不是它们包含的数据。通过这样做,我可以避免不必要的网络调用。
  • 我很抱歉之前的问题模棱两可。我已经更新了它。
  • 嗨,这里是 Firebase 团队的 Doug。这实际上是 Query 的 equals() 实现的一个已知问题。我积极参与了一项让这项工作按您希望的方式工作的提案,但确定这实际上是一个破坏性的 API 更改,这意味着不幸的是,这是一个难以解决的问题。

标签: android firebase firebase-realtime-database


【解决方案1】:

这似乎有效

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

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

【讨论】:

  • 感谢这项工作。返回的字符串包含数据库路径以及查询参数。正是我想要的。哈克的方法,但它会做的工作。我正在使用的 Firebase SDK 版本中的 query.zzVd().toString()。
  • 这可能会在未来中断,因为该 zzWM 方法名称已被 proguard 混淆,并且不能保证在每个版本中都相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多