Android Studio开发Firebase Realtime Database读取数据返回null问题咨询
Firebase Realtime Database 安卓端数据读取实现方案
单条指定时间测量数据读取
- 首先匹配数据库层级初始化正确的
DatabaseReference,路径需要和你写入数据的层级完全一致,比如写入时路径为根节点 > 用户名 > 测量记录 > 时间戳,读取时的引用初始化代码为:DatabaseReference measurementRef = FirebaseDatabase.getInstance().getReference("你的根节点名称").child(目标用户名).child("measurement"); - 不要编写同步返回结果的
downloadData方法,Firebase数据库的读写为异步逻辑,直接在方法内return结果会因为回调未触发就返回导致空值。你可以通过自定义回调接口的方式将查询到的Measurement对象传递到调用层处理。 - 数据转换时确保Measurement类包含无参构造方法,所有字段名称和数据库中存储的字段完全对应,同时配置对应getter、setter方法,否则
dataSnapshot.getValue(Measurement.class)会返回null。 - 在
reportTV的点击逻辑中,要先判断回调返回的Measurement对象非空再进行UI赋值操作,避免空指针异常。
最近5-10条历史数据拉取
- 你可以利用Firebase的查询语句实现按时间排序的条数限制拉取:
如果你的测量记录节点的key直接使用时间戳,或者每个Measurement对象内有存储毫秒级时间的timestamp字段,对应查询代码分别为:- 以节点key为时间戳排序:
Query last10Query = measurementRef.orderByKey().limitToLast(10); - 以子字段timestamp为依据排序:
Query last10Query = measurementRef.orderByChild("timestamp").limitToLast(10);
- 以节点key为时间戳排序:
- 给上述Query对象添加ValueEventListener后,遍历返回的
DataSnapshot的所有子节点,即可得到按时间正序排列的10条测量记录,如需倒序展示直接反转列表即可。
读取异常排查时可先确认安全规则配置是否开放了对应用户节点的读权限,避免权限拦截导致返回空数据。
内容的提问来源于stack exchange,提问作者dnewe
相关产品推荐
相关产品推荐

