6

私はFire Baseのデータを表示するRecycler Viewerを持っていますが、最初のリストには約4k個の要素が含まれています。私は完全なリストがロードされるのを待つのではなく、最初の15の要素だけを表示しようとしていますが、それを行う方法がわかりません。RxJava 2を使用してFlowable <Object>のデータをFirebaseデータベースから読み込む方法を教えてください。

私はサブスクライバ経由で(x)要素を取得しようとしていますが、読み込みパフォーマンスは改善されません(Firebase DBから4k要素まで待機します)。これをスピードアップする方法は?

加入者 - プレゼンター

@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()); 
          } 
         } 
      ); 
    } 

出版社 - データのソース(FireBaseデシベル)

@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); 

答えて

2

私はあなたがメソッドlimitToFirst()を使用する必要があると考えています。

このような何か:

@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

しかし、その後、どのように15の限界過去の文書を検索しますか?ユーザーがRecyclerView内を完全にスクロールすると、Firebaseは自動的にそのポイントを超えるデータをポーリングします。 –

+0

ページネーションはここでは一般的なトピックです。 [これらの回答の1つ]を見ることができます(https://stackoverflow.com/search?q=firebase+pagination) –

関連する問題