2016-09-30 12 views
4

私の質問は多分愚かなものかもしれませんが、私はドキュメントを読んでいますが、私の質問に対する解決策はありません。最後の15個のメッセージを取得するためにlimitToLastを使用すると(5から20まで)、20番目のメッセージを削除した場合、childListenerはこのようなメッセージを返します(5-6-7-8-9-10-11-12- 13-14-15-16-17-18-19-4)最後の項目は数字4です。コードはそうです:
messagesListener = FBMessagesRef.limitToLast(15).addChildEventListener(new ChildEventListener()、どうすれば修正できますか? 4番目の項目Firebase limitToLastクエリ

+0

現在の回答が役に立たない場合は、質問を編集して[問題を再現する最小限のコード](http://stackoverflow.com/help/mcve)を追加してください。今は、あなたの 'ChildEventListener'がどのように実装されているかを知る方法がありません。これはおそらく問題の一部です。 –

+0

私は同じ問題を抱えています。解決策はありますか? – starrystar

答えて

0

に留まるように、我々は、 がアクティブリストの外に落ちることをアイテムごとにchild_removedイベントを受け取ります値を15に変更する場合は、limitToLastの値を-1に変更して最後のFirebaseの値を取得します。 コードをスニペット以下に変更します。

0

Firebaseの公式文書によれば、制限値がデータベース内の項目数より少ない場合、データベース内のすべての項目が読み取られます。私は確信しています。

limitToLast(上限)はfirebase.database.Query

が 子供たちの最後の特定数に制限され、新しいクエリオブジェクトを生成し返します。

limitToLast()メソッドは、与えられたコールバックに対して子の最大数 を同期させるために使用されます。上限を100に設定すると、最初に は100個までのchild_addedイベントのみを受信します。 私たちのデータベースに格納されているメッセージが100個未満の場合、child_addedイベントはメッセージごとに です。しかし、100を超えるメッセージがある場合、 は最後の100個のメッセージに対してchild_addedイベントのみを受信します。 項目が変更すると、設定したときに、最後の15桁の数字を取得しているので、総数は100

+0

どのようにこの動作を避けることができるので、メッセージの順序を混乱させることはありませんか? – Andrea

+0

アイテム全体のarraylistを作成し、配列上にopreationsを作成することができます。 childeventlistenerを使用した公式のfirebase配列の例として、https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseArray.javaを参照してください。 – uguboz