使用startAt、endAt查询Firebase实时数据库时如何获取DataPelanggan子节点数据
Firebase Realtime Database 获取DataPelanggan子节点调整方案
核心说明
你当前编写的日期范围查询逻辑已经正确命中了Users/Pending节点下所有符合前缀规则的父节点,只需要调整数据模型和适配器的读取逻辑即可拿到子节点DataPelanggan的内容,改动最小的实现方案如下:
步骤1:调整Model实体类结构
新增嵌套的DataPelanggan类,对应数据库里该子节点的所有字段:
public class Model { // 保留原有其他需要读取的父节点字段,不需要的可以删除 private DataPelanggan DataPelanggan; // 字段名必须和数据库里的子节点名完全一致 // Firebase序列化要求必须保留无参构造方法 public Model() {} // 对应的getter和setter方法 public DataPelanggan getDataPelanggan() { return DataPelanggan; } public void setDataPelanggan(DataPelanggan dataPelanggan) { DataPelanggan = dataPelanggan; } // 嵌套类对应DataPelanggan子节点下的字段 public static class DataPelanggan { // 替换成你实际的字段名,和数据库完全一致 private String namaPelanggan; private String nomorTelepon; private String alamat; public DataPelanggan() {} // 每个字段对应的getter和setter方法 public String getNamaPelanggan() { return namaPelanggan; } public void setNamaPelanggan(String namaPelanggan) { this.namaPelanggan = namaPelanggan; } // 其他字段的getter setter以此类推 } }
步骤2:调整适配器读取逻辑
在MyAdapter的onBindViewHolder方法中直接读取DataPelanggan的内容即可:
@Override protected void onBindViewHolder(@NonNull MyAdapter.ViewHolder holder, int position, @NonNull Model model) { Model.DataPelanggan data = model.getDataPelanggan(); // 用读取到的子节点数据给控件赋值 holder.tvNama.setText(data.getNamaPelanggan()); holder.tvHp.setText(data.getNomorTelepon()); // 其他字段赋值以此类推 }
注意事项
如果你不需要读取父节点的其他任何字段,只需要DataPelanggan的内容,也可以直接把Model类的字段全部替换成DataPelanggan下的字段,不需要修改现有查询逻辑,适配成本很低。
实体类的字段名必须和数据库字段名完全匹配,大小写不能错,否则会读取不到数据。
内容的提问来源于stack exchange,提问作者user17562398
相关产品推荐
相关产品推荐

