确保所有Firebase单个ValueEventsListeners都已完成

时间:2016-12-07 18:45:15

标签: android firebase firebase-realtime-database

正如文档中所提到的,最好是获取额外的数据,而不是数据库中的嵌套对象。

据此,我如何确保所有数据都来了?

我找到了这个解决方案,但我不确定这是否有用。

mPetsReference.addValueEventListener(new ValueEventListener() {
    private List<Pair<Pet, Owner>> mData;
    private long mChildrenCount;
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        mData = new ArrayList<>();
        mChildrenCount = dataSnapshot.getChildrenCount();
        for (DataSnapshot data : dataSnapshot.getChildren()) {
            Pet pet = data.getValue(Pet.class);
            mOwnersReference.child(pet.getOwnerId())
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            mData.add(new Pair<>(pet, dataSnapshot.getValue(Owner.class)));
                            if (mData.size() == mChildrenCount) {
                                everythingCame();
                            }
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            mChildrenCount--;
                            if (mData.size() == mChildrenCount) {
                                everythingCame();
                            }
                        }
                    });
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
    }
});

0 个答案:

没有答案