android中的Firebase不删除节点

时间:2017-07-29 15:33:34

标签: android firebase firebase-realtime-database

我在数据库中有这个项目

enter image description here

我有一个删除项目的方法,但是没有用,这是方法

public void deleteBag(String bagUid, final FirebaseDeleteBaglListener listener) {
    Query query = dbReference.child(FirebaseChild.bags.name()).child(bagUid);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            dataSnapshot.getRef().setValue(null);
            listener.notifyBagDeleted();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

它很好地获得了参考,但方法setValue(null)无效(我也尝试了removeValues()

我没有得到任何例外或某种回应,我希望你能帮助我。

谢谢!

2 个答案:

答案 0 :(得分:0)

我相信你有一个将你的项目插入数据库的模型类。 所以你要做的就是使用该类直接引用对象并对其执行所需的操作。这样的事情。

public void deleteBag(String bagUid, final FirebaseDeleteBaglListener listener) {
Query query = dbReference.child(FirebaseChild.bags.name()).child(bagUid);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
 //This shouldn't be there
  //dataSnapshot.getRef().setValue(null);
//instead use the modelclass you used inserting data, to reference the object 
      Modelclass mode =  dataSnapshot.getValue(Modelclass.class);
  /** Note this line indicates the getter and setter method for the particular object that is being referenced**/     
     mode.setItem(null)
     listener.notifyBagDeleted();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

}

答案 1 :(得分:0)

对Firebase数据库执行查询时,可能会有多个结果。您正在使用ValueEventListener,因此快照包含所有结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您需要循环DataSnapshot.getChildren()以获取与您的查询匹配的各个项目:

public void deleteBag(String bagUid, final FirebaseDeleteBaglListener listener) {
  Query query = dbReference.child(FirebaseChild.bags.name()).child(bagUid);
  query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      for (DataSnapshot child: dataSnapshot.getChildren()) {
        child.getRef().removeValue();
      }
      listener.notifyBagDeleted();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
      throw databaseError.toException(); // don't ignore errors
    }
  });
}