下面是我的Firebase的图像表示,其中用户上载了Electronics或Books类别以及更多类别下的项目。我想用RecyclerView
建立一个活动,在这里我要显示用户上载的唯一项目。由于我使用的是userid
,可以将子项目的详细信息推送到子项中,因此我可以使用userid
从子项中检索项目并显示在firebase中。但是,如何搜索不同类别的每个孩子并将其显示在一个RecyclerView
中。
显示“电子”子项目的代码是
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
的任何类别的所有记录。
谢谢。
答案 0 :(得分:1)
在Firebase中构造数据时,您确实需要非常仔细地考虑数据的结构,以便可以对它们运行有效的查询。例如,在您的情况下,您应该按如下所示组织数据。
userid
- Electronics
- Camera
- Cooker
- Books
- A brief history of time
- Inferno
因此,您可以以这样的方式运行查询,即可以一次将所有项目置于某个userid
下。
如果您确实需要为计划在应用程序中执行的其他查询集提供的结构,那么也考虑复制数据。也就是说,您可能会考虑在不同的结构中包含重复的数据条目(复制),以便执行高效的查询。例如,您数据的当前结构适用于以下查询。
获取特定类别下的所有用户ID。
我想你明白我的意思。如果您不想更改数据的结构,那么恐怕您可能必须先从Firebase获取应用程序中的所有数据。然后,您必须自己遍历数据以查找实际需要的元素。
希望有帮助!