2016-12-23 10 views
0

後、私は削除Firebaseデータ一定時間

How to delete firebase data after "n" days

からこの仕事をしようとしてきたが、それは私のために働いていません。

は、ここで私は私の「A」の活動で

、やってんだよ、私は、タイムスタンプ値を保持している「timeStampに」子供と、このデータのチャンクを保存するためのボタンがあります。 (.setValue(ServerValue.TIMESTAMP);)

ボタンを押すと、データが正常に保存されます。次に、次のアクティビティを開始し、そこで待機します。

「30」日後に削除するのではなく、すぐに削除します。

私は正確にフランク

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

+0

投稿したコードを実行すると、予想どおりの動作をします。構造体とタイムスタンプ値を示すデータベースのスライスをエクスポートしてポストします。 –

+0

@qbixありがとうございました、上記の質問にEDITのデータを入れました。 – SaltySea

+0

リファレンス 'mDatabase'が正しく設定されていないと思われます。それを定義するコードを投稿してください。 –

答えて

0

orderByChild()ソート方法は非常に寛容です。ソートされる子は、指定されたフィールド名を持つメンバーを持つ必要はありません。 documentationは、それらの子にnull値が割り当てられ、ソートの最初に表示されることを説明しています。したがって、クエリを作成するために使用された参照が誤って見つかった場合、クエリは失敗せず、代わりにその場所のすべての子を通常返します。

あなたはmDatabaseどこを使ってoldBugクエリを作成:

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

これが高すぎる1つのレベルです。

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

ありがとう、これはそれでした!ところで、私は小さな問題があります。リアルタイムで削除するにはどうしたらいいですか? – SaltySea

+0

あなたは「リアルタイム」で何を意味するのかを説明しなければなりません。 –

+0

たとえば、5分後に削除するデータを設定すると、5分後にデータが完全に削除されます。リフレッシュするまで5分ではありません。 – SaltySea

0

。この方法では、間違った値を心配する必要はなく、正しいデータを確実に削除することができます。私はこれが役立つことを願っています

関連する問題