android - 如何访问 Firebase 数据库中动态添加的孩子的孩子?
问题描述
我知道如何访问“结果”,因为它有一个永不改变的可靠名称。但是“结果”下的孩子是动态添加的。我如何能够遍历“结果”的孩子,然后访问“数据”?
对于“结果”下的每个孩子,我想制作一个卡片视图,该卡片视图将在回收器查看器中设置,TextView 中的“基准”和 Imageview 中的(Base64)字符串。
编辑 我试过这个:
resultsRef = FirebaseDatabase.getInstance().getReference("users").child("results");
resultsRef.addListenerForSingleValueEvent(new ValueEventListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot ds: snapshot.getChildren()) {
String datumStr = ds.child("datum").getValue(String.class);
holder.datum.setText(datumStr);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
解决方案
您正在getReference("users").child("results");
数据库中创建对的引用。但是没有/users/results
,所以snapshot
你得到的将是空的。
因此,您需要加载整个users
节点,然后results
从每个子节点获取:
resultsRef = FirebaseDatabase.getInstance().getReference("users").child("results");
resultsRef.addListenerForSingleValueEvent(new ValueEventListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot userSnapshot: snapshot.getChildren()) {
DataSnapshot resultsSnapshot: userSnapshot.getChild("results");
for (DataSnapshot resultSnapshot: resultsSnapshot.getChildren()) {
String datumStr = ds.child("datum").getValue(String.class);
holder.datum.setText(datumStr);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException(); // don't ignore errors
}
});
请注意上面给快照赋予有意义的名称如何有助于理解它们实际引用的内容。
另外:您将不同类型的数据(用户配置文件及其结果)嵌套在单个顶级节点下,Firebase 文档在其最佳实践中明确建议不要这样做。
您当前方法的一个缺点是,例如,为了显示用户名列表,您最终也会为所有这些用户加载所有结果。即使这不是您的应用程序的安全问题,也肯定会浪费带宽。
推荐阅读
- mysql - SQL 从另一个表中删除包含值的 ID
- twitter-bootstrap - Boostrap 模板缩放图像滑块
- r - 无法使用 rvest 抓取带有表单的网站
- flutter - 右侧溢出 17 个像素的 renderflex
- kotlin - sortedWith() 扩展函数中 Kotlin 中的逆变
- reactjs - 在 React 中旋转 Globe.gl 地球仪(使用 react-three-fiber 或其他方式)
- javascript - 表单验证 - 带有 patterMismatch 的函数不显示错误
- xml - 如何在 XSD 中使用没有包装器元素的 complexType?
- job-scheduling - 具有相同计划的控制 M 循环作业不应并行运行
- java - GET 请求中的过滤器