wor*_*l44 4 java android firebase firebase-realtime-database
我想删除我的Friebase中的一些旧数据.我知道这个问题在这里问了很多,但我仍然很难让它发挥作用.
我试试这里找到的解决方案:
但这已被弃用了.
所以我这样试试:
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);
}
Run Code Online (Sandbox Code Playgroud)
解释:在我的Firebase中,我保存了一个名为Marker的对象,该对象有一个变量来存储已保存的对象,即Firebase中保存对象的日期.
int date = c.get(Calendar.DATE);
marker.setSavedate(date);
Run Code Online (Sandbox Code Playgroud)
我希望在30天后删除Firebase中的对象.因此,我尝试从今日日期中减去30天,而不是将其与来自对象的已保存项进行比较,如果它等于我将从Firebase中删除该对象.
对于Substraction我参考以下答案:
但它不起作用.如果我今天向Firebase添加一个对象,那么两个日期总是相等的.所以我猜减法不起作用.
我究竟做错了什么?
Fra*_*len 12
假设您有一个带有节点的数据结构:
-KItqNxLqzQoLnUCb9sJaddclose
time: "Thu Apr 28 17:12:05 PDT 2016"
timestamp: 1461888725444
Run Code Online (Sandbox Code Playgroud)
每个这样的节点都有一个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();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12688 次 |
| 最近记录: |