2017-03-03 146 views
1

在我的Android應用程序中,我需要比較兩個Firebase數據庫查詢對象的等效性。有什麼方法可以讓我斷言兩個查詢對象基於它們的數據庫引用和查詢參數是等價的嗎?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 
+0

你試過'orderByChild(child).equalsTo(whatever)'?或者我認爲你應該得到這兩個數據,並在他們完全獲得時進行比較。 – koceeng

+1

我想在Query對象上聲明equals而不是它們包含的數據。通過這樣做,我可以避免不必要的網絡電話。 –

+0

我很抱歉前面的問題是模糊的。我已經更新了它。 –

回答

0

這似乎是工作

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

我不認爲你會做需要這個。據我所知,只要有引用上的偵聽器,Firebase就會保留緩存的結果。所以即使你有2個,它也只是從緩存版本中獲得它,但我可能是錯的。

+0

謝謝你的工作。返回的字符串包含數據庫路徑以及查詢參數。正是我在找的東西。哈克的方法,但它會完成這項工作。 query.zzVd()。toString()在我使用的Firebase SDK版本中。 –

+0

這可能會在將來中斷,因爲zzWM方法名已被proguard混淆,並且不保證在每個發行版中都相同。 –