gpt4 book ai didi

java - 使用特定的 orderby 从包含多个子节点的 FireBase 数据库中检索数据

转载 作者:行者123 更新时间:2023-12-04 10:58:30 26 4
gpt4 key购买 nike

我一直试图在不知道“蓝色”键的值的情况下检索“红色”数据(假设有多个带有随机键的子项),但我无法想出适当的代码。
这是 Firebase 子树。

db image

我尝试编写此代码但它不起作用(我是初学者)

 List<String> idlist = new ArrayList<String>();
DatabaseStage = FirebaseDatabase.getInstance().getReference("Stages");
Query query = DatabaseStage.orderByChild("uniqueId").equalTo(stageid);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> stagedata = dataSnapshot.child("userEtudList").getChildren();
for(DataSnapshot it: stagedata){
if (!(it.getValue().equals("test"))){
idlist.add(it.getValue().toString());
}
}

Ps :如果您想知道在这种情况下 orderByChild(uniqueId).equalTo(stageid) 的使用,stageid 等于 2fdedf71-4346-4395-bee5-38db04d4fd47 它允许我选择一个特定的 child ,即第二个 child 。

这是使用断点获得的变量的状态,因为您可以看到它不断获取 {key = userEtudList , Value =null} 但没有到达 Children 的数据快照

image

最佳答案

出于此答案的目的,我将您的问题解释为“我想在所选 userEtudList 节点的 Stages 节点中生成所有值的列表,而不考虑它们的键。(例如,告诉我哪些学生在那门类(class)中)同样,您处理 test 值的代码实际上只是测试代码,与此挑战无关。

你的问题是 dataSnapshot不是真正的单个节点。它是您进行查询的数据库级别的所有匹配节点的集合。由于您的 equalTo 在这种情况下只有一件商品的事实真的没有关系。 (例如,想象一下如果没有您在查询中调用 equalTo 的情况下此代码如何工作——它不能,因为它不知道快照中的哪个项目可以从 userEtudList 子项中获取!)。这就是为什么当您尝试获取 userEtudList 时 child 快照是空的。 Doc Reference

Calling getValue() on a snapshot returns the Java object representation of the data. If no data exists at the location, calling getValue() returns null.



解决这个问题 ,您可能应该断言 dataSnapshot.getChildrenCount() == 1进而:

Iterable<DataSnapshot> stagedata = dataSnapshot.getChildren()
.iterator().next()
.child("userEtudList").getChildren();

如果您能够以某种方式依赖键名始终等于 uniqueId (我不清楚您为什么要将 uniqueId 存储为 key 以外的其他内容//可能,这只是使用数据库屏幕截图的人工制品)您可以通过以下方式避免这种情况:

Iterable<DataSnapshot> stagedata = dataSnapshot.child(stageid)
.child("userEtudList").getChildren();

当然,在这种情况下,可以删除整个查询,您可以直接检索该节点。

关于java - 使用特定的 orderby 从包含多个子节点的 FireBase 数据库中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com