如何在未知父节点的情况下读取Firebase指定节点的值
在未知父节点时获取指定节点的值
嘿,我来帮你搞定这个问题!从你的代码来看,你现在是在empresa/Farmacia/[当前用户ID]路径下遍历所有子节点并转换成Empresa对象。如果要在不知道父节点的情况下获取键为7NmECb...的节点的值,只需要在遍历过程中多做一层检查就行。
修改后的代码示例
private void recuperarPedidos(){ DatabaseReference produtosRef = dReference .child("empresa") .child( "Farmacia") .child(UsuarioFirebase.getIdUsuario()); produtosRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { empresas.clear(); // 遍历所有未知的父节点 for (DataSnapshot parentNode : dataSnapshot.getChildren()){ // 查找当前父节点下的目标节点7NmECb... DataSnapshot targetNode = parentNode.child("7NmECb..."); if (targetNode.exists()) { // 根据你的数据类型获取值,这里示例用String,可按需修改 String targetValue = targetNode.getValue(String.class); // 这里可以添加你对目标值的处理逻辑 Log.d("PedidoData", "找到目标节点的值:" + targetValue); } // 保留你原来的业务逻辑 empresas.add(parentNode.getValue(Empresa.class)); } if (!empresas.isEmpty()) { categoria = empresas.get(0).getCategoria(); } } @Override public void onCancelled(DatabaseError databaseError) { // 建议添加错误日志,方便排查问题 Log.e("FirebaseError", "数据获取失败:" + databaseError.getMessage()); } }); }
逻辑说明
- 首先还是保持原有的路径引用,获取到
empresa/Farmacia/[用户ID]的快照 - 遍历该路径下的所有子节点(也就是你说的“未知父节点”)
- 对每个父节点,直接通过
child("7NmECb...")定位到目标节点,用exists()判断该节点是否存在 - 如果存在,就根据数据类型获取对应的值,再做后续处理
额外提示
- 如果目标节点在更深的层级,只需要在
parentNode.child()里补充完整的相对路径即可,比如parentNode.child("subNode/7NmECb...") - 如果需要获取所有匹配的目标节点(而不是第一个),不要在找到后跳出循环,继续遍历所有父节点就行
内容的提问来源于stack exchange,提问作者José Otávio
相关产品推荐
相关产品推荐

