2016-12-28 4 views
1

Я хочу удалить узел Room2 из базы данных Firebase. У меня есть эта структура базы данных:Невозможно удалить узел из Firebase в Android

db-24f7f 
| 
- Hotel 
     | 
    -Room1 
     | 
      beds:"2" 
      Chairs: "6" 
    -Room2 
     | 
     beds:"3" 
     Chairs: "8" 

Я попытался, как

database = FirebaseDatabase.getInstance(); 
myRef = database.getReference(); 
database.getReference("Hotel").orderByChild("Chairs").equalTo("8").addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
      dataSnapshot.getRef().setValue(null); 
    } 

Это удалить всю базу данных. Тогда я попытался, как

database = FirebaseDatabase.getInstance(); 
myRef = database.getReference(); 
database.getReference("Hotel").orderByChild("Chairs").equalTo("8").addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for(DataSnapshot ds:dataSnapshot.getChildren()){ 
        ds.getRef().removeValue(); 
       } 
      } 

и найти это:

12-28 12: 31: 21.813 22950-22950/PKGName_o E/ViewRootImpl: sendUserActionEvent() MView == нуль 12-28 12 : 31: 21.813 22950-22950/PKGName_o E/ViewRootImpl: sendUserActionEvent() mView == null W/PersistentConnection: pc_0 - Использование неуказанного индекса. Подумайте о добавлении «.indexOn»: «Стулья» в отеле к вашим правилам безопасности и правил базы данных Firebase для лучшей производительности.

После этого узел не удаляется из Firebase. Почему он не может удалить узел?

+0

Ваш второй код в порядке, он должен работать уже. И logcat только показывает предупреждение, firebase sdk предлагает вам добавить этот параметр индекса в правила базы данных Firebase. Ваш код будет работать, если вы не добавите это правило. Я пробовал свой код с использованием той же базы данных, и Room2 удалялся, как ожидалось. – Wilik

ответ

1

Под узел комнаты добавьте ключ комнаты.

db-24f7f 
| 
- Hotel 
     | 
    -Room1 
     | 
      beds:"2" 
      roomKey: "Room1" 
      Chairs: "6" 
    -Room2 
     | 
     beds:"3" 
     roomKey: "Room2" 
     Chairs: "8" 

Обратитесь к ссылке «Отель».

DatabaseReference hotelRef = myRef.child("Hotel"); 

Если вы просто хотите удалить room2, то сделать это, установив значение room2 в null -

hotelRef.child("Room2").setValue(null); 

Если вы хотите, чтобы удалить все номера с 8 стульями, а затем -

hotelRef.orderByChild("Chairs").equalTo("8").addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for(DataSnapshot ds:dataSnapshot.getChildren()){ 
         String roomKey = (String) ds.child(roomKey).getValue(); 
         hotelRef.child(roomKey).setValue(null); 
        } 
       }