【问题标题】:How to deletel last node from firebase database onClick listener?如何从firebase数据库onClick监听器中删除最后一个节点?
【发布时间】:2020-12-14 02:20:29
【问题描述】:
我正在使用一个按钮来删除我数据库中的最后一个条目。
但是一旦我点击它,Firebase 中的所有数据都会被删除,而不仅仅是最后一个条目。我知道我可以使用“limitToLast”,但我不知道如何正确使用它。我该怎么做?
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Query query = databaseReference.child("uploads").limitToLast(1);
query.getRef().removeValue();
}
这是我的 Firebase 数据结构:
database structure
【问题讨论】:
标签:
android
firebase
firebase-realtime-database
【解决方案1】:
Firebase 不支持删除查询,您可以将条件发送到数据库以在每个节点上执行操作。 query.getRef() 实际上会返回您正在运行查询的节点,因此实际上您运行的是:
databaseReference.child("uploads").removeValue();
这就解释了为什么整个 uploads 节点会被删除。
相反,您必须:
- 执行查询。
- 将结果提取到您的应用程序代码中。
- 对每个结果执行操作。
所以在代码中:
Query query = databaseReference.child("uploads").limitToLast(1);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot results) {
for (DataSnapshot snapshot: results.getChildren()) {
snapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}
【解决方案2】:
您的代码按预期工作。它肯定会删除“上传”下的所有内容。问题是您的查询实际上并没有被执行。您只是在构建查询而不运行它。我建议查看documentation 以了解如何运行查询,然后使用查询结果来确定要删除的子项。您需要为查询添加一个侦听器才能真正获得其结果。