android - 如何获取节点名称以 kpk 开头的所有值,仅输出一个字符串
问题描述
我如何获取节点以 KPK 或 PU 开头的值,因为我只知道省/州名称。或者我怎样才能只获得以 KPK 开头的“节点名称”。或者我可以遵循任何结构来获取以 KPK/PU 开头的城市名称。我只想保存城市名称,我只知道省/州名称。我希望模态类只有一个字符串变量,因为将来会添加城市。所以想要一个通用的模态类。
解决方案
使用您当前的数据结构,您有两个选择:
- 读取您显示的根目录下的所有数据并过滤客户端。
- 执行两次读取:对以 开头的每个节点执行一次读取,
kpk_
对以. 开头的每个节点执行一次读取pu_
。然后在客户端合并它们。
第一种方法比较简单,但是读取的数据太多。第二种方法只读取需要的数据,但代码会更复杂。
实际上有第三种方法可以与您当前的结构一起使用,但可能会停止您添加更多数据的工作。您可以在 开始和 kpk_
结束pu_~
。此范围正好包括当前 JSON 中所需的节点。
代码将是这样的:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("/path/to/data");
ref.orderByKey().startAt("kpk_").endAt("pu_~").addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot child: snapshot.getChildren()) {
System.out.println(child.getKey()+": "+child.getValue(String.class));
}
}
public void onCancelled(DatabaseError error) {
throw error.toException();
}
});
请注意,通常建议在节点下仅保留单一类型的数据。如果您有一个需要pu_*
and的用例kpk_*
,则考虑在 JSON 中添加一个额外的节点,您只保留这些值。虽然编写这个附加结构更复杂,但它会更有效且更易于阅读。
推荐阅读
- java - 当我们在方法中创建锁(同步块)对象时会发生什么?
- amazon-web-services - AWS CloudFormation StackSet 失败并显示消息“尝试在现有堆栈上执行创建操作”
- javascript - 单击“搜索”按钮后未收到客户端消息
- ios - 合并两个图像时 CISourceOverCompositing 丢失水印的 alpha
- java - 在 OnClick android 上启动后台服务
- c++ - 准确理解对象在内存中的映射方式
- c# - 每次更新数据库表时记录
- php - 如何使用codeigniter在所有页面中添加水印图像?
- oracle - 模态对话框 - 在关闭模态对话框或提交按钮时刷新父页面
- time - 运行时分析(时间复杂度)