2016-12-28 10 views
1

Room2ノードをFirebaseデータベースから削除します。私は、データベース全体を削除AndroidのFirebaseからノードを削除できません

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

として試み

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

:私は、このデータベースの構造を有しています。

12-28:12:31:21.813 22950から22950/PKGName_o E/ViewRootImpl:sendUserActionEvent()MVIEW == NULL 12-28 12それから

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

及びこれを見つけるように試み:31:21.813 22950-22950/PKGName_o E/ViewRootImpl:sendUserActionEvent()mView == null W/PersistentConnection:pc_0 - 不特定のインデックスを使用しています。より良いパフォーマンスのために、 "" .indexOn ":" Chairs "をセキュリティとFirebaseデータベースルールに追加することを検討してください。

これ以降、ノードはFirebaseから削除されません。なぜノードを削除できないのですか?

+0

2番目のコードは問題ありません。既に動作しているはずです。そして、logcatは警告のみを表示します。firebase sdkは、そのインデックスオプションをFirebaseデータベースルールに追加することを示唆しています。そのルールを追加しないと、コードが機能します。 同じデータベースを使用してコードを試しましたが、期待どおりRoom2が削除されました。 – Wilik

答えて

1

Under Roomノードにルームキーを追加します。

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

ここで「ホテル」の参考情報を取得します。あなたは8つの椅子がすべての部屋を削除したい場合は、その後、

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

- -

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

あなただけのROOM2を削除したい場合は、nullにROOM2の値を設定することで、そう

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); 
        } 
       } 
関連する問題