我正试图从我的火炉实时数据库中提取数据。这里我面临的问题是,我可以成功地从/ItemList中提取数据,但是当我试图从/ItemRequest中提取数据时,数据不能被提取,但是当我给它一个特定的路径(如/ItemRequest/admin )时,它就能工作了。我想要做的是用来自/ItemRequest的来自管理员和用户的所有子程序填充一个列表视图,我正在使用firebase列表适配器来填充我的列表视图,那么有什么方法可以做我想做的吗?
数据库布局

发布于 2019-01-11 08:09:15
我想要做的是用来自/ItemRequest的来自admin和user的所有子视图填充一个listview。
要解决这个问题,您需要对DataSnapshot对象进行两次迭代,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference itemRequestRef = rootRef.child("ItemRequest");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
for(DataSnapshot ds : dSnapshot.getChildren()) {
String productName = ds.child("ProductName").getValue(String.class);
Log.d(TAG, productName);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
itemRequestRef.addListenerForSingleValueEvent(valueEventListener);logcat中的输出将是:
Manix
Manix
Manix如果您想在ListView中显示这些结果,请参阅我在这篇文章中的回答:
发布于 2019-01-11 07:50:01
AFAIK,FirebaseListAdapter不能很好地处理具有多个子对象的子对象,并且没有查询方法可以将它们过滤掉。我宁愿使用DataSnapshots逐个手动地提取子项,将它们添加到数组列表中,然后使用自定义数组适配器填充列表。
https://stackoverflow.com/questions/54142198
复制相似问题