2016-04-14 19 views
5

İletilerimin düğümün son id almak çalışıyorum, ancak o sonuncuyu alamıyor. Örneğin, benim son id 12'dir, ama her zaman benim kod aşağıdaki gibi olduğunu öğenin 10'un id döndürüyor:Firebase geçen kimliği almak - limitToLast çalışmıyor - android

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

O dönmelidir:

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) {} 

}); 

Böyle bir şey döndürür

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}} 

Benim veri böyle bir şeydir Buna ek olarak

, ben "LimitToFirst" den "LimitToLast" değiştirmek (ilk almak thatshould), ben (düğüm 1), çok düğüm 10 alır gereken ilk elemanını almaz.

kimse sorun olabilir biliyor mu?

+0

bu sorunu çözdü mü? Ben aynı sorunla karşı karşıyayım – Tushar

cevap

0

Ben mesajlar sayısal biçimde tekrar sipariş etmek gerek sıralanır beri sorun, orderByChild olduğuna inanıyoruz. Bu deneyin:

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

Bence bu doğru cevap –

İlgili konular