如何在Firebase的一个RecyclerView中显示两个孩子的物品

时间:2019-07-17 17:45:10

标签: java android firebase firebase-realtime-database

下面是我的Firebase的图像表示,其中用户上载了Electronics或Books类别以及更多类别下的项目。我想用RecyclerView建立一个活动,在这里我要显示用户上载的唯一项目。由于我使用的是userid,可以将子项目的详细信息推送到子项中,因此我可以使用userid从子项中检索项目并显示在firebase中。但是,如何搜索不同类别的每个孩子并将其显示在一个RecyclerView中。

enter image description here

显示“电子”子项目的代码是

dbreference = FirebaseDatabase.getInstance().getReference("Electronic").child("userid");

dbreference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
      if (snapshot.exists()) {
         for (DataSnapshot data : snapshot.getChildren()) {

            final Solditem b1 = data.getValue(SoldItem.class);

            child_count++;
            list.add(b1);
            staggeredBooksAdapter.notifyDataSetChanged();
      }
    }
}

但是我也想显示一个用户,该用户从同一userid中的Books中将等于RecyclerView的用户作为键。

要从我使用的任何类别中删除项目

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Query sellerquery = ref.child("Electronic").child("userid");

sellerquery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) {
            appleSnapshot.getRef().removeValue();
        }
    }
}

要删除键值等于userid的用户上传项目的所有记录,我需要重复上面的代码。

是否有最佳和简短的方法来删除键值等于userid的任何类别的所有记录。

谢谢。

1 个答案:

答案 0 :(得分:1)

在Firebase中构造数据时,您确实需要非常仔细地考虑数据的结构,以便可以对它们运行有效的查询。例如,在您的情况下,您应该按如下所示组织数据。

userid
    - Electronics
        - Camera
        - Cooker
    - Books
        - A brief history of time
        - Inferno

因此,您可以以这样的方式运行查询,即可以一次将所有项目置于某个userid下。

如果您确实需要为计划在应用程序中执行的其他查询集提供的结构,那么也考虑复制数据。也就是说,您可能会考虑在不同的结构中包含重复的数据条目(复制),以便执行高效的查询。例如,您数据的当前结构适用于以下查询。

  

获取特定类别下的所有用户ID。

我想你明白我的意思。如果您不想更改数据的结构,那么恐怕您可能必须先从Firebase获取应用程序中的所有数据。然后,您必须自己遍历数据以查找实际需要的元素。

希望有帮助!