android - Android Firebase 通过子搜索获取单节点值
问题描述
你好这是我的firebase我正在尝试查询
https://i.stack.imgur.com/Ldexn.png
我试图通过搜索 where "name" = "Cafe" 来获取孩子 "02" 的值
category.orderByChild("name").equalTo("Cafe").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Category catx = dataSnapshot.getValue(Category.class);
Toast.makeText(AdminCategories.this, "xx"+catx.getName(), Toast.LENGTH_SHORT).show();
admCatId.setText(dataSnapshot.getKey());
admCatName.setText(catx.getName());
admCatImage.setText(catx.getImage());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
但是我使用这段代码得到了 null ..
当我使用时,我得到了想要的结果
category.child("02").addValueEventListener(new .....)
请注意,我不使用任何适配器或列表,我只需要通过名称搜索来获取单个孩子的结果..
解决方案
当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
您onDataChange
需要处理该列表,它目前没有。最简单的更改是迭代dataSnapshot.getChildren()
:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot categorySnapshot: dataSnapshot.getChildren()) {
Category catx = categorySnapshot.getValue(Category.class);
Toast.makeText(AdminCategories.this, "xx"+catx.getName(), Toast.LENGTH_SHORT).show();
admCatId.setText(categorySnapshot.getKey());
admCatName.setText(catx.getName());
admCatImage.setText(catx.getImage());
}
}
另见:
推荐阅读
- html - 带时间间隔的滑块
- php - 根据 WooCommerce 订单中的用户角色显示自定义税收总计行
- elasticsearch - Kibana安装报错“Kibana server is not ready yet”(CentOS)
- jitsi-meet - 如何使用自动缩放实现多个 jibri 服务器
- postgresql - 创建简单的删除函数 postgresql
- optimization - 优化solr索引时如何限制合并段的数量?
- lua - Lua 脚本(鼠标相关)
- ios - Swift - 排队合并请求
- c++ - 为什么不能使用`cout`直接在c++中输出return的地址?
- directory - 为什么配音看不到源文件夹?