Firebase获取唯一键下tmpHR子节点值返回null问题求助
解决Firebase Realtime Database获取tmpHR返回null的问题
我来帮你排查这个问题,你遇到的tmpHR返回null的情况,主要是循环层级错误和变量作用域问题导致的,咱们一步步拆解解决:
问题分析
- 监听层级理解错误:你给
nilaihr节点添加了ChildEventListener,当nilaihr下新增一个随机唯一键节点时,onChildAdded里的dataSnapshot已经直接指向这个唯一键节点(也就是包含tmpHR和Date的那个节点),不需要再嵌套for (DataSnapshot uniqueKeySnapshot : dataSnapshot.getChildren())循环——这个循环会遍历tmpHR和Date这两个子节点,而你要的tmpHR是在唯一键节点下,不是它的子节点的子节点。 - 变量作用域冲突:你在
onChildAdded里定义了局部的Integer hrValue,但showData方法调用的是全局的hrValue,全局变量根本没被赋值,所以array1里添加的都是初始的null值。 - 数据类型兼容问题:Firebase Realtime Database会把整数存储为
Long类型(即使你存的是Integer),直接用getValue(Integer.class)可能会出现类型不匹配,建议先转为Number再转成int。
修正后的代码
Integer hrValue; ArrayList<Integer> array1 = new ArrayList<>(); DatabaseReference userdatabase = FirebaseDatabase.getInstance().getReference().child("Users"); DatabaseReference ref = userdatabase.child(user.getUid()).child("hrvalue").child("nilaihr"); ref.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { // dataSnapshot就是每个随机唯一键对应的节点,直接读取tmpHR Number hrNumber = dataSnapshot.child("tmpHR").getValue(Number.class); if (hrNumber != null) { hrValue = hrNumber.intValue(); Log.i("heart rate value", "hrvalue " + hrValue); showData(dataSnapshot); } else { Log.i("heart rate value", "tmpHR节点不存在或值为null"); } } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) {} @Override public void onChildRemoved(DataSnapshot dataSnapshot) {} @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) {} @Override public void onCancelled(DatabaseError databaseError) { Log.e("Firebase Error", databaseError.getMessage()); } }); private void showData(DataSnapshot dataSnapshot) { if (hrValue != null) { array1.add(hrValue); Log.i("database array", "array database " + array1.toString()); } }
额外验证建议
- 确认你的数据库结构确实是:
Users -> [用户UID] -> hrvalue -> nilaihr -> [随机唯一键] -> tmpHR (Integer)、Date (String) - 可以在
onChildAdded里打印dataSnapshot.getValue().toString(),查看该节点下的完整数据,确认tmpHR是否存在且有值。
内容的提问来源于stack exchange,提问作者Astrid Gloria
相关产品推荐
相关产品推荐

