使用新的Firebase數據庫框架的Android應用程序。它具有這樣建模的數據對象: 其中頂級父母(1234-4321)是'聊天室',數據對象是'聊天消息',編號項目(0,1,2)是'個人信息'。如何在Google Firebase數據庫中使用過濾器和子元素
我能夠讓整個數據庫沒有任何麻煩,並通過監聽閱讀:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
myRef.addChildEventListener(this);
myRef.addValueEventListener(this);
,我能夠進入這個時尚單子:
FirebaseDatabase database = FirebaseDatabase.getInstance();
String id = "1234-4321";
DatabaseReference myRef = database.getReference().child(id);
myRef.addChildEventListener(this);
myRef.addValueEventListener(this);
但我不能爲我的生活弄清楚如何獲得同一類型的多個對象。我的意思是,用戶可以獲得多個聊天室(IE,'1234-4321'和'1234-4432'),但我唯一能看到的方式是:
1)通過onChildAdded或onDataChange偵聽器進行循環,通過匹配字符串id來分離出項目並進行更新。這是,然而,非常低效的,因爲我解析整個數據庫,這可能是相當大
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot != null){
try {
ChatObjectV2 objectV2 = (ChatObjectV2) dataSnapshot.getValue();
//Check here for ids and loop through everything
} catch (Exception e){
e.printStackTrace();
}
}
}
或
2)添加特定的孩子,但如果我試圖添加更多的孩子是當我想讓它變得更寬時,會更深入到嵌套對象中。
//This won't work because it is going 'deeper' instead of 'wider'
String id = "1234-4321";
String id2 = "1234-4432";
Query myQuery = myRef.child(id).child(id2);
然後遍歷監聽同樣的方式,但是,我需要建立一個不同的DatabaseReference每一個聊天室,這是可怕的效率低下。
它看起來像解決方案可能使用filters,但我不能在我的生活中弄清楚如何在現有的FirebaseDatabase和DatabaseReference對象中使用它們。有沒有人有任何想法如何使過濾器工作與我在這裏列出的數據模式/模型?
感謝您的幫助!
通讀他們,他們肯定是有幫助的,但沒有樣本會爲我正在嘗試做的工作。我猜這裏的真正目標是在我的查詢中添加多個where子句(IE Where id = 123或者id = 321),這在文檔中我沒有看到任何地方。這是你之前聽說過的或知道如何在firebase(Java/Android)中完成的嗎? – Silmarilos
所以當你要使用這兩個ID時。讓我們說ID1和ID2 ..他們之間的共同連接是什麼?他們將如何相關? –
這種關係只是因爲他們的ID可能位於聊天室某處的發送或接收ID中,例如,客戶A有2個「聊天室」打開,一個由他們開始,另一個不由他們開始。客戶A因此將他們的ID在以下兩個字段之一中:(「sentBy」或「receivedBy」)。 – Silmarilos