我正在尝试从Firebase实时数据库中提取数据。我在这里面临的问题是我可以成功地从/ ItemList中提取数据,但是当我尝试从/ ItemRequest中提取数据时,数据无法被提取,但是当我给它指定诸如/ ItemRequest / admin之类的特定路径时,它就可以工作。我正在尝试用管理员和用户的/ ItemRequest中的所有子项填充列表视图。我正在使用Firebase列表适配器填充列表视图,所以有什么方法可以做我想要的吗?
数据库布局
答案 0 :(得分:2)
我想做的是用管理员和用户的/ ItemRequest中的所有子项填充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
中显示这些结果,请参阅我在这篇文章中的回答:
答案 1 :(得分:0)
AFAIK,FirebaseListAdapter不适用于本身具有多个子级的子级对象,并且没有查询方法可以将其过滤掉。我宁愿使用DataSnapshots逐一手动拉出子项,然后将它们添加到arraylist中,然后使用自定义数组适配器填充该列表