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

Firebase Realtime Database组合orderByKey与orderByChild查询失败如何解决

解决方案

核心问题说明

Firebase 实时数据库不支持单次查询中调用多个orderBy*方法,你先后调用orderByKey和orderByChild的写法本身违反SDK的查询限制,所以会执行失败。你不需要在查询阶段指定读取DataPelanggan子节点,只需要在数据解析阶段提取该子节点内容即可。

调整方案(无需修改原有Model和适配器代码,推荐)

你只需要修改SearchListView中FirebaseRecyclerOptions的构造逻辑,通过SnapshotParser直接从查询返回的父节点快照中提取DataPelanggan子节点的内容,原有适配器代码完全不用改动:

// 替换原来的FirebaseRecyclerOptions构造代码
FirebaseRecyclerOptions<Model> options =
        new FirebaseRecyclerOptions.Builder<Model>()
                .setQuery(queryByKey, new SnapshotParser<Model>() {
                    @NonNull
                    @Override
                    public Model parseSnapshot(@NonNull DataSnapshot snapshot) {
                        // 直接从父节点快照中取出DataPelanggan子节点解析为Model
                        return snapshot.child("DataPelanggan").getValue(Model.class);
                    }
                })
                .build();

额外注意事项

如果你的Pending节点下的键(key)没有*前缀,需要删掉startAt和endAt中额外添加的*,否则会导致日期范围筛选匹配不到数据:

// 调整后的查询逻辑,没有多余的*前缀
Query queryByKey = pendingRef.orderByKey()
        .startAt(tanggalawal)
        .endAt(tanggalakhir + "\uf8ff");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:54:03