2016-04-14 17 views
5

私のメッセージノードの最後のIDを取得しようとしていますが、最後のIDは取得できません。例えば、私の最後のIDは12ですが、それは常に項目10のID私のコードを返します。このようなものです:それはこのような何かを返すFirebaseが最後のIDを取得する - limitToLastが機能しない - アンドロイド

final Query query = firebase.orderByChild("messageId").limitToLast(1); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 

    public void onDataChange(DataSnapshot dataSnapshot) { 

     Log.i("MessagesFrag","snapshot: "+dataSnapshot.getValue()+""); 

    } 

    public void onCancelled(FirebaseError firebaseError) {} 

}); 

{10={chatId=6, time=Wed Apr 13 22:20:43 EDT 2016, message=hi, user=123, messageId=10}} 

をそれは返す必要があります:

messages 
    9: 
    chatId: "6" 
    message: "hi" 
    messageId: "9" 
    time: "Wed Apr 13 22:29:02 EDT 2016" 
    user: "123" 
    10: 
    chatId: "6" 
    message: "hello" 
    messageId: "10" 
    time: "Wed Apr 13 22:29:02 EDT 2016" 
    user: "1234" 
    11: 
    chatId: "6" 
    message: "how are you?" 
    messageId: "11" 
    time: "Wed Apr 13 22:29:02 EDT 2016" 
    user: "123" 
    12: 
    chatId: "6" 
    message: "I am fine" 
    messageId: "12" 
    time: "Wed Apr 13 22:29:02 EDT 2016" 
    user: "1234" 
{12={chatId=6, time=Wed Apr 13 22:29:02 EDT 2016, message=I am fine, user=1234, messageId=12}} 

私のデータは、このようなものです

それに加えて、「LimitToLast」を「LimitToFirst」に変更すると、最初の要素(ノード1)が得られず、ノード10も取得されます。

誰にも問題があることは知っていますか?

+0

この問題を解決しましたか?私は同じ問題に直面している – Tushar

答えて

0

メッセージが数値順に並べ替えられているため、再度注文する必要はありません。問題はorderByChildだと思います。これを試してください:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     // change this to your databae ref 
     final DatabaseReference messages = database 
       .getReference("XXXX") 
       .child("XXXX"); // change this to your databae ref 

     messages .limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() { 

      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       if (dataSnapshot.exists()) { 
        // access last message 
        DataSnapshot messageSnapShot= dataSnapshot.getChildren().iterator().next(); 
       } 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
+1

これは正しい答えだと思います –

関連する問題