我开始使用Firebase Realtime Database,并且对我的数据结构有疑问。 请参阅下面的当前数据库:
我已为设备订购了OS子级产品,以便按OS进行过滤,只得到想要的子级产品。
但是在过滤之前,我想用合并在一起的所有子项填充我的RecyclerView。
如果我做FirebaseDatabase.getReference(DEVICES)
,我将拥有所有数据,但不匹配Java对象。
如果我执行FirebaseDatabase.getReference(DEVICES).child(macOS)
,则可以使用,但是列表中只有macOS设备。
有什么办法可以“加入”
FirebaseDatabase.getReference(DEVICES).child(macOS)
FirebaseDatabase.getReference(DEVICES).child(iOS)
...
在一个DatabaseReference中?
此外,我使用Firebase UI来将数据绑定到我的RecyclerView
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
devices = FishApp.getDatabase().getReference(Constants.DEVICES);
devices.keepSynced(true);
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_devices, container, false);
ButterKnife.bind(this, view);
mAdapter = new FirebaseDeviceAdapter(getActivity(), Device.class, R.layout.item_device, DeviceHolder.class, devices);
return view;
}
编辑:添加了Java代码和数据库屏幕截图
答案 0 :(得分:0)
一种快速的方法是监视/捕获 DEVICES 节点,然后遍历其子节点。这样,您可以访问所有孩子并检索所需的孩子。这是一个例子。
DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("DEVICES");
db.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// test for null and validity
if (dataSnapshot.exists() && dataSnapshot.getValue() != null) {
// loop through all the immediate children
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
// This gets all the children of the mac node
if ("macOS".equals(snapshot.getKey())) {
for (DataSnapshot dataSnapshot1 : snapshot.getChildren()) {
// Retrieve individual values of the macOS node
}
}
// This gets all the children of the windows node
else if ("windows".equals(snapshot.getKey())) {
for (DataSnapshot dataSnapshot1 : snapshot.getChildren()) {
// Retrieve individual values of the windows node
}
}
// This gets all the children of the iOS node
else if ("iOS".equals(snapshot.getKey())) {
for (DataSnapshot dataSnapshot1 : snapshot.getChildren()) {
// Retrieve individual values of the iOS node
}
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// handle cancel event
}
});
我希望这会有所帮助。快活的编码!