在一段时间后删除Firebase数据

时间:2016-12-23 18:19:11

标签: android firebase firebase-realtime-database

我一直试图从

开始这项工作

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) {
        }
    });

但是一旦发布,它就不会在一段时间后删除它。

谢谢。

编辑:

data

2 个答案:

答案 0 :(得分:0)

我认为您可能会考虑制作一个具有时间戳和日期的新子项,以便在查询日期和时间时可以引用它。这样您就不必担心错误的值,并且可以确保删除正确的数据。我希望这会有所帮助。

答案 1 :(得分:0)

orderByChild()排序方法非常宽容。被排序的子节点不需要具有指定字段名称的成员。 documentation解释了这些子项被赋值为空值并首先出现在排序中。因此,如果用于创建查询的引用位置不正确,则查询不会失败,而是通常会返回该位置的所有子项。

您使用oldBug创建了mDatabase查询,其中:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();

这个级别太高了。它应该是:

 Query oldBug = mDatabase.child("Users").orderByChild("timeStamp").endAt(cutoff);