2017-02-26 16 views
6

Fire Base db'den veri görüntüleyen Recycler Viewer var, ancak ilk Liste yaklaşık 4k öğeleri içeriyor. Tam listenin yüklenmesini beklemek yerine sadece ilk 15 öğeyi göstermeye çalışıyorum ancak nasıl yapılacağından emin değilim.Nasıl geliştirilir Firebase db kullanarak Flowable <Object> veri okuma RxJava 2?

(x) öğelerini Abone aracılığıyla almaya çalışıyorum, ancak okuma performansını artırmaz (hala Firebase DB'den 4k öğeleri bekler). Bu nasıl hızlanır?

Abone - Sunucu

@Override 
    public void onBindViewHolder(final ListContentFragment.ViewHolder holder, int position) { 

    modelInterface.getDataFromFireBase("FinalSymbols") 
      .take(15) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Consumer<DataSnapshot>() { 
          @Override 
          public void accept(DataSnapshot dataFromDb) throws Exception { 
      //update TextView inside Recycler Viewer 
           holder.name.setText(dataFromDb.child(String.valueOf(holder.getAdapterPosition())).child("description").getValue().toString()); 
           holder.description.setText(dataFromDb.child(String.valueOf(holder.getAdapterPosition())).child("categoryName").getValue().toString()); 
          } 
         } 
      ); 
    } 

Yayınevi - Veri (Firebase db) kaynağı

@Override 
public Flowable<DataSnapshot> getDataFromFireBase(final String childName) { 
    return Flowable.create(new FlowableOnSubscribe<DataSnapshot>() { 
     @Override 
     public void subscribe(final FlowableEmitter<DataSnapshot> e) throws Exception { 
      databaseReference.child(childName).addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) {     
        e.onNext(dataSnapshot); 
        e.onComplete(); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 
    }, BackpressureStrategy.BUFFER); 

cevap

2

Sana yöntemi limitToFirst() kullanmak gerekir inanıyoruz. Böyle

şey:

@Override 
public Flowable<DataSnapshot> getDataFromFireBase(final String childName) { 
    return Flowable.create(new FlowableOnSubscribe<DataSnapshot>() { 
     @Override 
     public void subscribe(final FlowableEmitter<DataSnapshot> e) throws Exception { 
      databaseReference.child(childName).limitToFirst(15).addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) {     
        e.onNext(dataSnapshot); 
        e.onComplete(); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 
    }, BackpressureStrategy.BUFFER); 
+0

Ama sonra nasıl 15 sınırı geçmiş belgeleri almak ki? Kullanıcı, RecyclerView içinde aşağı doğru kaydırırsa, otomatik olarak Firebase'i otomatik olarak –

+0

Pagination'ın buradaki popüler bir konu olduğu noktadan çıkarır. [Bu cevaplardan biri] bölümüne bakabilirsiniz (https://stackoverflow.com/search?q=firebase+pagination) –

İlgili konular