2017-04-02 2 views
0

Je travaille actuellement sur une application qui utilise strictement Firebase pour le backend. Dans mon application, je veux supprimer le premier message qui a été écrit après 30 messages. En d'autres termes, je veux autoriser seulement 30 messages à stocker. Dans ma base de données Firebase, j'ai un noeud appelé "users", puis un noeud pour les ID utilisateur, puis sous l'un des ID utilisateur, j'ai un autre noeud appelé items. Cependant, je veux supprimer le premier enfant sous le noeud items, mais je ne connais pas le nom de cet enfant puisque j'utilise la méthode .push() pour définir la clé pour cela. Est-ce que quelqu'un sait comment supprimer seulement ce premier enfant?Suppression du premier enfant à l'aide d'une touche push() dans Firebase

Je sais comment supprimer un enfant dans Firebase, je ne sais pas comment accéder à un enfant. J'ai essayé quelque chose le long de:

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

Ensuite, faites cela pour supprimer l'enfant.

firstMessage.removeValue(); 

Je sais juste après la .child (« éléments ») qu'il devrait y avoir un autre enfant, mais comment puis-je obtenir cette clé?

Edit: Je suis venu avec une solution, mais au lieu de supprimer le premier enfant dans le nœud éléments, il supprime le premier enfant dans le nœud utilisateurs

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

La solution la plus simple va certainement utiliser des fonctions Cloud pour Firebase écrire un déclencheur de base de données qui décide, chaque élément est ajouté, si elle doit être la suppression d'éléments anciens en réponse. –

Répondre

0

Vous pouvez essayer dans votre OnDataChange,

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

Vous pouvez obtenir toutes les clés de tous les enfants par ceci. vous pouvez les ajouter dans arraylist ou faire autre chose.

Si vous voulez supprimer certains enfants, utilisation

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

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

EDIT 04/03/2017:

Je ne peux pas obtenir votre nouvelle question. Juste un exemple sur l'utilisation de 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

J'ai essayé cette solution et cela fonctionne, mais j'ai besoin de remplir l'arrayliste au cas où des clés seraient déjà stockées lors de la création du chargement. Une idée de comment cela est fait? C'est là que je suis coincé avec cette méthode. –

+0

Je ne comprends pas vraiment votre question. Mais j'ai mis à jour la réponse et vous pouvez voir si c'est utile. –

+0

Désolé à ce sujet. Je vais essayer cette méthode. Recommanderiez-vous d'utiliser childEventListener? Ou est-ce qu'un autre type d'auditeur serait nécessaire? Désolé, je commence juste à apprendre Android et Firebase! –