我有显示来自Fire Base数据库的数据的Recycler Viewer,但是初始列表包含大约4k元素。我试图只显示前15个元素,而不是等待完整列表被加载,但是不确定如何做。
我正在尝试通过订阅服务器获取(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);

最佳答案

我相信您需要使用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);

10-08 07:10
查看更多