You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Firebase中通过指定子节点值查询同节点的Type字段取值

代码修改方案

你现有代码的核心问题是查询条件使用错误,调整如下即可实现需求:

  • 你需要按子节点的Name字段匹配查询,不能使用orderByValue(),该方法仅适用于节点本身为基础类型(字符串/数字等)的排序查询,当前Category下的每个子节点都是包含Name、Type两个字段的对象,需使用orderByChild("Name")指定匹配字段
  • 原有代码硬编码了查询值"Salary",需要替换为方法传入的sName参数
  • Firebase的数据监听是异步回调逻辑,你当前定义的同步返回String的方法无法直接拿到查询结果,建议通过接口回调传递结果

修正后的代码示例

// 先定义回调接口用于接收异步返回的结果
public interface OnCategoryTypeGotListener {
    void onGot(String type);
    void onError(Exception e);
}

private void GetCategory(String sName, OnCategoryTypeGotListener listener) {
    DatabaseReference db = FirebaseDatabase.getInstance().getReference("Category");
    // 按Name字段匹配传入的sName参数
    Query query = db.orderByChild("Name").equalTo(sName);

    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
                String eType = userSnapshot.child("Type").getValue(String.class);
                Log.d("Category","查询到的Type值:"+ eType);
                // 回调返回结果
                if (listener != null) {
                    listener.onGot(eType);
                }
                // 如果Name是唯一值,匹配到之后可以直接终止循环
                break;
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            if (listener != null) {
                listener.onError(databaseError.toException());
            }
        }
    });
}

调用示例

GetCategory("Salary", new OnCategoryTypeGotListener() {
    @Override
    public void onGot(String type) {
        // 此处可以使用查询到的Type值处理后续逻辑
    }

    @Override
    public void onError(Exception e) {
        // 处理查询异常
    }
});

参考的数据库结构如下:
数据库结构

内容的提问来源于stack exchange,提问作者AV114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 06:27:03