2016-12-21 19 views
5

Bir sohbet uygulaması yapmaya çalışıyorum, Firebase'i arka uç olarak kullanıyorum, Gönderdiğim son 10 mesaj ile onCreate() listemi görüntülüyorum ve I Sadece kullanıcı yukarı kaydırdığında^her seferinde 10 tane daha yükleyeceğini isteyin.Firebase (Android) daha fazla ürün yüklemek için (Android)

Tüm çalışma durumum var, sorun Firebase'in tüm verilerini her zaman yüklediği ve mevcut verilerle 10 artmadığıdır.

Örneğin: başlangıçta 10 ileti yükler ve yukarı kaydırdığımda 20 ileti yükler ve sonra her seferinde 10 tane daha yüklemek yerine 30 ileti yükler. Sana endAt()

ref.orderByChild("creationDate").limitToLast(pageSize).endAt(oldestLocalMessageTime).addValueEventListener 
// pageSize is the number of messages you want to load each time (10) 
// oldestLocalMessageTime is the time of oldest message that you have loaded from Firebase 
// everytime you load/load more messages you need to update oldestLocalMessageTime value 
+0

Liste her kaydırıldığında, mesaj referansı oluşturuyorsunuz. Uygulamanızın tüm verileri almasının nedeni budur. –

+0

Hey Febi, Evet bunu biliyorum. Bu yüzden Firebase kullanarak nasıl yapılabileceğini soruyorum? –

+0

Sadece tekrar ve tekrar referans oluşturmak yerine, sorgularınızı liste kaydırmasında güncelleyin. –

cevap

3

:

Bu

kodudur. Kullanıcı listenin sonuna ulaştığında, sunucudan daha fazlasını yüklemek için bir yöntem çağırın. ValueEventListener uyguladığınızdan emin olun.

Query pagination = mDatabase.orderByChild("id").startAt(startAt).endAt(startAt + 10); 
pagination.addListenerForSingleValueEvent(this); 
+0

Lütfen bana aynı tür bir problemde yardımcı olabilir misiniz, SO sorusu: - http://stackoverflow.com/q/42502024/3946958 –

1

Eğer startAt(), Endat() ve equalTo() yöntemini kullanabilirsiniz kullanabilirsiniz düşünüyorum

//Listview to find when user is scrolling and reach the top i.e firstVisibleItem == 0 

messagesList.setOnScrollListener(new AbsListView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView absListView, int i) { 

    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

     if (firstVisibleItem == 0 && !loading) { 
      msgNum += 10; 
      setMessagesList(msgNum); //your load more function 
     } 
    } 
}); 

//Firebase to load more on scroll code: 
public void setMessagesList(int msgNum) { 

    MessegesRef2 = database.getReference("chatsMessages").child(chatID); 
    messageValueListener = MessegesRef2.orderByChild("creationDate").limitToLast(msgNum).addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      loading = true; 
      for (DataSnapshot data: dataSnapshot.getChildren()) { 

       ChatMessage chatMessage = data.getValue(ChatMessage.class); 

       chatMessageAdapter.add(chatMessage); 
       chatMessageAdapter.notifyDataSetChanged(); 
      } 
      loading = false; 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 
+0

Bu Javascript kodu, soru Java (Android) – koceeng

+1

var Android için cevabı düzenledim. Teşekkürler –

+0

@DinIslamMilon Lütfen bu soruya bakın http://stackoverflow.com/q/42502024/3946958 .. Aynı problemde yığılmışım –

İlgili konular