所以我正在制作一个壁纸应用程序,它有不同的分类,但是我想在一个称为random的片段中显示firebase中所有节点的所有图像,我还想让图像洗牌每个父节点的图像
以下是我的firebase结构:
其中还有子节点:
以下是随机片段中的java代码:
private void getWallpapers() {
progressBar.setVisibility(View.VISIBLE);
myRef = database.getReference().child("Wallpaper").child("Random");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
collectionsArray.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
wallpaper z = postSnapshot.getValue(wallpaper.class);
collectionsArray.add(z);
}
Collections.reverse(collectionsArray);
progressBar.setVisibility(View.GONE);
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
System.out.println("Error Reading from DB");
}
});
1条答案
按热度按时间hmae6n7t1#
没有可以跨数据库中不同节点获取元素的内置查询。鉴于每个类别都有不同的结构,我能想到的最佳选择是复制数据。这种做法被称为反规范化,是一种常见的做法,当谈到火基。为了更好的理解,我建议你看这个视频,非规范化对于firebase数据库来说是正常的。
因此,您应该创建另一个节点,该节点将保存数据库中的所有图像,无论属于哪个类别。若要随机选择墙纸,请从以下帖子中查看我的答案:
如何在节点firebase中获得唯一的随机积?
还要记住,在复制数据时,有一件事需要牢记在心。同样,在添加数据时,需要对其进行维护。换句话说,如果你想更新/删除一张壁纸,你需要在它存在的每一个地方都这样做。
如果您还对以下方面感兴趣:
firebase cloud firestore中的反规范化是什么?