2017-04-02 58 views
0

我目前正在研究嚴格使用Firebase作爲後端的應用。在我的應用程序中,我想刪除30條消息後寫入的第一條消息。換句話說,我想只允許存儲30條消息。在我的firebase數據庫中,我有一個名爲「users」的節點,然後是用戶ID的節點,然後在其中一個用戶ID下,我有另一個名爲items的節點。但是,我想要刪除項目節點下的第一個子項,但我不知道該子項的名稱,因爲我正在使用.push()方法來設置它們的鍵。有人知道如何刪除第一個孩子嗎?使用Firebase中的推式()鍵刪除第一個孩子

我知道如何刪除Firebase中的一個孩子,我只是不知道如何訪問那個孩子。我試着沿着線的東西:

DatabaseReference firstMessage = mDatabase.child("users").child(mUserId).child("items").getRef(); 

然後做刪除的孩子。

firstMessage.removeValue(); 

我的.child之後知道(「項目」)應該有一個額外的孩子,但我怎麼拿到鑰匙?

編輯:我想出了一個解決方案,但是,而不是刪除第一個孩子中的項目節點,它刪除了第一個孩子在用戶節點

DatabaseReference firstMessage = mDatabase.child("users").child(mUserId).child("items").orderByPriority().limitToFirst(1).getRef(); 
+0

最簡單的解決方案可能是將要使用雲功能的火力地堡寫一個數據庫觸發器決定,每個項目將被添加,是否應該在響應中刪除舊項目。 –

回答

0

您可以在onDataChange試試這個,

for (DataSnapshot p : dataSnapshot.getChildren()) { 
    String childKey = p.getKey(); 
} 

你可以通過這個獲得所有孩子的所有關鍵。 你可以將它們添加到arraylist或做其他事情。

如果你想刪除一些孩子, 使用

myRef.child("item").child("childKey_0").setValue(null); 

============================= =====

編輯於2017年3月4日:

我不能讓你的新問題。只是使用arrayList的一些例子。

ArrayList<String> childKey_list = new ArrayList<>(); 

for (DataSnapshot p : dataSnapshot.getChildren()) { 
    childKey_list.clear(); //clear the arrayList everytime the firebase refresh 
    String childKey = p.getKey(); 
    childKey_list.add(childKey); 
} 

If (some_method_of_time) { 
    String delete_childID = childKey_list.get(0); 
    myRef.child("item").child(delete_childID).setValue(null); 
} 
+0

我已經試過這個解決方案,它的工作原理,但我需要填充arraylist,以防在創建裝載時存儲密鑰。任何想法如何做到這一點?這是我用這種方法卡住的地方。 –

+0

我真的不明白你的問題。但是我已經更新了答案,你可以看看它是否有用。 –

+0

對不起。我會嘗試這種方法。你會推薦使用childEventListener嗎?或者會需要一種不同類型的聽衆?對不起,剛開始學習Android和Firebase! –