为了账号安全,请及时绑定邮箱和手机立即绑定

“ n”天后如何删除Firebase数据

“ n”天后如何删除Firebase数据

慕后森 2019-10-18 13:58:07
我想从Firebase中删除一些旧数据,但我很难使它工作。我尝试了以下解决方案:Firebase聊天-删除旧消息但这并不被弃用。所以我这样尝试:ChildEventListener childEventListener = new ChildEventListener() {    @Override    public void onChildAdded(DataSnapshot dataSnapshot, String s) {        Calendar calendar = Calendar.getInstance();        calendar.add(Calendar.DAY_OF_MONTH, -30);        Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());        String key = dataSnapshot.getKey();        Marker retrievemarker =dataSnapshot.getValue(Marker.class);        Calendar t3 = new                   GregorianCalendar        (c.get(Calendar.YEAR),         c.get(Calendar.MONTH),         retrievemarker.getSavedate());        int date1= calendar.get(Calendar.DATE);        int date2= t3.get(Calendar.DATE);        Log.d("date1",""+date1);        Log.d("date2",""+date2);        if( date1 == date2 ){            myRef.child(key).setValue(null);        }作为说明:在Firebase中,我保存了一个名为Marker的对象,该对象有一个变量来存储保存的内容,即该对象在Firebase中的保存日期。int date = c.get(Calendar.DATE);marker.setSavedate(date);我想在30天后删除Firebase中的对象。因此,我尝试从“今天的日期”中减去30天,而不是将其与“对象”中的“保存对象”进行比较(如果等于),我将从Firebase中删除该对象。对于减法,我指的是以下问题的答案:如何使用Java日历从日期中减去X天?但这是行不通的。如果我今天将一个对象添加到Firebase,则两个日期始终相等。所以我想减法不起作用。我究竟做错了什么?
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

假设您有一个带有节点行的数据结构:


-KItqNxLqzQoLnUCb9sJaddclose

  time: "Thu Apr 28 17:12:05 PDT 2016"

  timestamp: 1461888725444

每个此类节点都有一个timestamp指示其创建时间的属性。最好使用Server Timestamp设置此属性。


使用此数据结构,您可以轻松构建一个查询,该查询仅返回30天以上的项目并将其删除:


long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS);

Query oldItems = ttlRef.orderByChild("timestamp").endAt(cutoff);

oldItems.addListenerForSingleValueEvent(new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot snapshot) {

        for (DataSnapshot itemSnapshot: snapshot.getChildren()) {

            itemSnapshot.getRef().removeValue();

        }

    }


    @Override

    public void onCancelled(DatabaseError databaseError) {

        throw databaseError.toException();

    }

});


查看完整回答
反对 回复 2019-10-18
  • 2 回答
  • 0 关注
  • 390 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信