2017-02-26 32 views
6

我有Recycler Viewer显示来自Fire Base数据库的数据,但是初始列表包含大约4k个元素。我试图只显示前15个元素,而不是等待完整列表加载,但不知道如何去做。如何使用RxJava 2从Firebase数据库中读取数据流数据流?<Object>?

我试图通过订阅服务器获取(x)元素,但它不会提高读取性能(它仍然等待Firebase数据库中的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()); 
          } 
         } 
      ); 
    } 

出版商 - 数据(火力DB)的源

@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

分页是这里的热门话题。你可以看看[其中一个答案](https://stackoverflow.com/search?q=firebase+pagination) –