2016-03-21 7 views
2

API Java для firebase, похоже, не слишком ясен. Добавить объекты в мой firebase как:Удалить элемент firebase по индексу или классу

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

Я показываю каждый элемент из firebase в listView. При длинном щелчке я хочу удалить выбранный элемент. Я могу получить индекс и объект с переднего конца arrayList.

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; 
    } 
}); 

Я не понял, как удалить mess. Я пробовал myFirebaseRef.removeVal(), но это удаляет все из базы данных.

+0

Что такое 'getKeysValues ​​()' return? Вам не нужно сохранять карту в firebase, вы можете просто сохранить объект Bean. –

+0

вам нужно получить FirebaseRef к определенному элементу, который вы хотите удалить, а затем использовать removeValue() на нем –

+0

@RonHarlev Как мне получить конкретный элемент? Некоторые элементы имеют одно и то же имя. – depperm

ответ

2

Если я правильно Вас понял, ваш набор данных выглядит следующим образом (в вашем Firebase Dashboard):

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

Вы можете только удалять значения с помощью цифровых клавиш, а точнее, все ключи, чтобы создать «путь» к объекту. Например, если вы хотите удалить объект питания FiReBaSeGenErAtEdKeY, , вам необходимо знать его путь. В этом случае ваш путь будет <your_ref>/food/FiReBaSeGenErAtEdKeY. Для этого:

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

Или, если вы хотите, чтобы удалить color значение, ваш путь будет <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 

Это может быть трудно получить ключ после того, как-фактум. Есть способы, чтобы получить его из DataSnapshot, но мне нравится, чтобы настроить свой объект так:

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 

} 

Затем, когда вы хотите создать/сохранить объект пищи:

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); 

Ссылки:

Смежные вопросы