我在数据库中有这个项目
我有一个删除项目的方法,但是没有用,这是方法
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()
。
我没有得到任何例外或某种回应,我希望你能帮助我。
谢谢!
答案 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
}
});
}