2017-04-02 63 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! –

相关问题