2016-03-21 6 views
2

Die Java-API für firebase scheint nicht zu klar zu sein. Ich Objekte hinzufügen meine Feuerbasis wie:Entfernen Sie Firebase-Element nach Index oder Klasse

Food foodObj=new Food(); 
foodObj.setValue("name",food);//food is a string 
foodObj.setValue("color",color); 
myFirebaseRef.push().setValue(foodObj.getKeysValues()); 

zeige ich jedes Element in von Feuerbasis in einem listView. Mit einem langen Klick möchte ich das ausgewählte Element löschen. Ich kann den Index und das Objekt vom vorderen Ende arrayList erhalten.

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

     final int temp = position; 
     new AlertDialog.Builder(FridgeActivity.this) 
       .setMessage("Do you want to delete this item?") 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Log.d(tag, "should delete:" + Integer.toString(temp)); 
         Food mess = fridge.get(temp); 

        } 
       }) 
      .setNegativeButton("No", null) 
      .show(); 
     return true; 
    } 
}); 

habe ich nicht herausgefunden, wie mess löschen. Ich habe versucht myFirebaseRef.removeVal(), aber das entfernt alles aus der Datenbank.

+0

Was gibt 'getKeysValues ​​()' zurück? Sie müssen keine Map in Firebase speichern, Sie können einfach ein Bean-Objekt speichern. –

+0

Sie müssen ein FirebaseRef zu dem spezifischen Element, das Sie entfernen möchten, und dann removeValue() darauf verwenden –

+0

@RonHarlev Wie bekomme ich ein bestimmtes Element? Einige Elemente haben denselben Namen. – depperm

Antwort

2

Wenn ich Sie recht verstehe, sieht Dataset wie folgt aus (in Ihrem Firebase-Dashboard):

yourApp: 
    food - 
     FiReBaSeGenErAtEdKeY - // Mapped to object Food 
           - name: "food" 
           - color: "color" 
     MoReGenErAtEdKeYs2  + 
     MoReGenErAtEdKeYs3  + 
     MoReGenErAtEdKeYs4  + 

Sie können nur löschen Werte mit den Tasten, und genauer gesagt, alle Schlüssel erstellen ein "Pfad" zum Objekt. Wenn Sie beispielsweise das Food-Objekt FiReBaSeGenErAtEdKeY, löschen möchten, müssen Sie dessen Pfad kennen. In diesem Fall lautet Ihr Pfad <your_ref>/food/FiReBaSeGenErAtEdKeY. Um dies zu tun:

myFirebaseRef 
    .child("food") //the food branch 
    .child("FiReBaSeGenErAtEdKeY") // the key of the object 
    .removeValue(); // delete 

Oder wenn Sie color Wert entfernen wollen, wird Ihr Weg <your_ref>/food/FiReBaSeGenErAtEdKeY/color

myFirebaseRef 
     .child("food") //the food branch 
     .child("FiReBaSeGenErAtEdKeY") // the key of the object 
     .child("color") //actually using "color" because that is the name of the key. This will remove the value, and because there are no more values, the key is empty, therefore it will be deleted too. 
     .removeValue(); // delete 

sein kann es schwierig sein, den Schlüssel nach-the-fact zu bekommen. Es gibt Möglichkeiten, sie von der DataSnapshot zu bekommen, aber Ich mag meine Aufgabe zu Setup wie folgt aus:

public class Food { 
    private String key;  // add the key here 
    private String name; 
    private String color; 
    //other fields 

    public Food(){ /* empty constructor needed by Firebase */ } 

    //Add all of your accessors 

} 

Dann, wenn Sie erstellen möchten/speichern das Essen Objekt:

String key = myFireBaseRef.push().getKey(); 
Food food = new Food(); 
food.setKey(key); 
food.setColor(color); 
food.setName(name); 

//Then to save the object: 
myFirebaseRef 
    .child("food") //move to the "food" branch 
    .child(food.getKey()) 
    .setValue(food); 

Referenzen:

Verwandte Themen