如何使用Firebase实时数据库中的键值或字段键删除所有字段和值?

时间:2020-03-15 02:00:22

标签: android firebase firebase-realtime-database

screenshot of data

DatabaseReference dr1 = FirebaseDatabase.getInstance().getReference("DailyExpenseTable");
dr1.removeValue();
Toast.makeText(getActivity(),"DailyExpense Removed",Toast.LENGTH_LONG).show();`

1 个答案:

答案 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(...)