2016-09-27 59 views
2

使用新的Firebase數據庫框架的Android應用程序。它具有這樣建模的數據對象: enter image description here 其中頂級父母(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對象中使用它們。有沒有人有任何想法如何使過濾器工作與我在這裏列出的數據模式/模型?

感謝您的幫助!

回答

3

我會嘗試解釋一下你的基本使用過濾這些例子:

//獲得前兩個聊天室小號

Query chatRoomsQuery = databaseReference.limitToLast(2); 

//獲得最後兩個聊天室

Query chatRoomsQuery = databaseReference.limitToFirst(2) 

//獲取所有活動ID

Query chatRoomsQuery = databaseReference.orderByChild("active").equalTo(true); 

這只是一個基本的示例中,我會鼓勵你去通過this blog。驚人地解釋了高級查詢。

或者,您也可以通過these docs。它們與你分享的不同。

請讓我知道這是你在找什麼。

+0

通讀他們,他們肯定是有幫助的,但沒有樣本會爲我正在嘗試做的工作。我猜這裏的真正目標是在我的查詢中添加多個where子句(IE Where id = 123或者id = 321),這在文檔中我沒有看到任何地方。這是你之前聽說過的或知道如何在firebase(Java/Android)中完成的嗎? – Silmarilos

+0

所以當你要使用這兩個ID時。讓我們說ID1和ID2 ..他們之間的共同連接是什麼?他們將如何相關? –

+0

這種關係只是因爲他們的ID可能位於聊天室某處的發送或接收ID中,例如,客戶A有2個「聊天室」打開,一個由他們開始,另一個不由他們開始。客戶A因此將他們的ID在以下兩個字段之一中:(「sentBy」或「receivedBy」)。 – Silmarilos

相關問題