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
相关产品推荐
相关产品推荐

