没有从firebase获得RecyclerView的所有结果

时间:2018-01-29 11:28:24

标签: java android firebase firebase-realtime-database firebaseui

我的应用程序有两类用户店主和买家。 当店主添加商店时,我使用他的UID,然后按下按钮添加这样的商店:

this

在Image" 83yV"和" FmNu"是店主,他们分别增加了2家和1家店铺。

现在对于买家来说,我想在Recycler View中显示整个商店列表。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_shops_avtivity);

    shopsDB = FirebaseDatabase.getInstance().getReference().child("shops");
}

@Override
protected void onStart() {
    super.onStart();
    FirebaseRecyclerAdapter<Shop,ShopViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Shop, ShopViewHolder>(
            Shop.class,
            R.layout.shop_single_layout,
            ShopViewHolder.class,
            shopsDB)
}

问题是,当我将Firebase Recycler Adapter指向shopDB时,它返回两个空的cardView,如下所示:

this

当我指向像

这样的特定孩子时
shopsDB = FirebaseDatabase.getInstance().getReference().child("shops").child("83yV24a3AmP15XubhPGApvlU7GE2");

它返回商店添加&#34; 83yV&#34;。

我如何才能获得其他所有者添加的商店?最好不要改变当前的数据库,也不要在儿童内部创建一个包含所有商店的数据库。

1 个答案:

答案 0 :(得分:1)

要实现这一目标,您需要使用getChildren()方法两次,一次获取所有用户,第二次获取所有商店。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference shopsRef = rootRef.child("shops");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            for(DataSnapshot dSnapshot : ds.getChildren()) {
                String name = dSnapshot.child("name").getValue(String.class);
                Log.d("TAG", name);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
shopsRef.addListenerForSingleValueEvent(eventListener);

使用此代码,您将能够向买家显示所有商店名称。