如何在“n”天后删除firebase数据

我想删除我的Friebase中的一些旧数据。 我知道这个问题在这里问了很多,但我仍然很难让它发挥作用。

我试试这里找到的解决方案:

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中删除该对象。

对于Substraction我参考以下答案:

如何使用Java日历从日期中减去X天?

但它不起作用。 如果我今天向Firebase添加一个对象,那么两个日期总是相等的。 所以我猜减法不起作用。

我究竟做错了什么?

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

 -KItqNxLqzQoLnUCb9sJaddclose time: "Thu Apr 28 17:12:05 PDT 2016" timestamp: 1461888725444 

每个此类节点都有一个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(); } }); 

我的Firebase结构就像 – > firebaseurl.com/test/user_id/2017-05-12然后我的数据是按时间结构所以我正在使用

 long cutoff = new Date().getTime()-TimeUnit.MILLISECONDS.convert(10, TimeUnit.DAYS); //Get days number for delete data Date d = new Date(cutoff ); SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd"); String old_date = `dateFormatGmt.format(new Date(cutoff)); // Get date of deleting content ref2 = new Firebase("firebaseurl.com/test/user_id/" + user_id); // Firebase url ref2.child(old_date).removeValue(); //Remove element 

这个对我有用