DatabaseReference dr1 = FirebaseDatabase.getInstance().getReference("DailyExpenseTable");
dr1.removeValue();
Toast.makeText(getActivity(),"DailyExpense Removed",Toast.LENGTH_LONG).show();`
答案 0 :(得分:1)
问题中的代码会删除整个DailyExpenseTable
节点,因此也会删除该节点下的所有费用。
如果要删除其下的单个节点,并且知道该节点的密钥,则可以使用以下方法删除它:
DatabaseReference dr1 = FirebaseDatabase.getInstance().getReference("DailyExpenseTable");
dr1.child("-M2QsnCvO7jTtZbXp47s").removeValue();
如果您不知道键,但是知道另一个属性,则可以首先执行查询,然后使用以下方法删除该查询的结果:
DatabaseReference dr1 = FirebaseDatabase.getInstance().getReference("DailyExpenseTable");
dr.orderByChild("dailyExpenseID").equalTo("2").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot expenseSnapshot: dataSnapshot.getChildren()) {
expenseSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}
在后一种情况下,如果dailyExpenseID
的多个费用可以具有相同的值,则可能最终删除多个节点。
如果这种情况永远不会发生,则您可能要考虑使用dailyExpenseID
作为子节点的键。因此,将它们存储在:
dr1.child(expenseId).setValue(...)
代替您现在可能使用的dr1.push.setValue(...)
。