我一直试图从
开始这项工作How to delete firebase data after "n" days
但它不适合我。
这是我正在做的事情,
在我的" A"活动,我有一个按钮,可以保存这一块数据,并带有' timeStamp'保存时间戳值的子项。 (.setValue(ServerValue.TIMESTAMP))
按下按钮后,它会成功保存数据。然后,它开始下一个活动,我们等待。
但不要在' 30'之后删除。几天,它会立即删除它。
我的方法与Frank
的答案完全相同long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS);
Query oldBug = mDatabase.orderByChild("timeStamp").endAt(cutoff);
oldBug.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot itemSnapshot: snapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但是一旦发布,它就不会在一段时间后删除它。
谢谢。
编辑:
答案 0 :(得分:0)
我认为您可能会考虑制作一个具有时间戳和日期的新子项,以便在查询日期和时间时可以引用它。这样您就不必担心错误的值,并且可以确保删除正确的数据。我希望这会有所帮助。
答案 1 :(得分:0)
orderByChild()
排序方法非常宽容。被排序的子节点不需要具有指定字段名称的成员。 documentation解释了这些子项被赋值为空值并首先出现在排序中。因此,如果用于创建查询的引用位置不正确,则查询不会失败,而是通常会返回该位置的所有子项。
您使用oldBug
创建了mDatabase
查询,其中:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
这个级别太高了。它应该是:
Query oldBug = mDatabase.child("Users").orderByChild("timeStamp").endAt(cutoff);