首页 > 解决方案 > 如何获取节点名称以 kpk 开头的所有值,仅输出一个字符串

问题描述

我如何获取节点以 KPK 或 PU 开头的值,因为我只知道省/州名称。或者我怎样才能只获得以 KPK 开头的“节点名称”。或者我可以遵循任何结构来获取以 KPK/PU 开头的城市名称。我只想保存城市名称,我只知道省/州名称。我希望模态类只有一个字符串变量,因为将来会添加城市。所以想要一个通用的模态类。

我的火力基地结构

标签: androidfirebasefirebase-realtime-database

解决方案


使用您当前的数据结构,您有两个选择:

  1. 读取您显示的根目录下的所有数据并过滤客户端。
  2. 执行两次读取:对以 开头的每个节点执行一次读取,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 中添加一个额外的节点,您只保留这些值。虽然编写这个附加结构更复杂,但它会更有效且更易于阅读。


推荐阅读