Firebase Kotlin读取子节点数据返回Null问题求助
Firebase User节点子节点读取返回Null的解决办法
先查权限和路径
先看Firebase数据库规则,要是规则限制了读取权限(比如默认的仅登录用户可读),没授权的话读出来就是Null。可以临时改成测试规则(测试完一定要改回去,防止数据泄露):{ "rules": { ".read": true, ".write": true } }同时核对代码里的节点路径,比如是
User还是users,大小写、拼写必须和控制台里的节点名完全一致。核对数据类型匹配
如果你用getValue(String.class)读,但数据库里子节点是数字、布尔值或者本身就是Null,肯定返回Null。先去控制台看子节点的实际类型,比如是整数就用getValue(Integer.class),布尔值就用getValue(Boolean.class),或者先拿到DataSnapshot再判断类型后读取。别踩异步读取的坑
Firebase数据读取是异步的,所有处理数据的逻辑必须放在回调函数里。要是你在onDataChange外面直接用读取到的变量,那时候数据还没返回,自然是Null。正确写法是把筛选、展示数据的代码都塞进onDataChange里:DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("User"); userRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // 所有数据处理逻辑放这里 for (DataSnapshot childSnap : dataSnapshot.getChildren()) { String targetValue = childSnap.child("目标子节点键名").getValue(String.class); if ("你要筛选的特定值".equals(targetValue)) { // 处理符合条件的数据 } } } @Override public void onCancelled(DatabaseError databaseError) { // 记得处理读取失败的情况 } });检查子节点键名拼写
代码里的子节点键名必须和控制台里的完全一致,比如控制台是nickname,你写成nickName,差个大小写就会读不到数据返回Null。直接复制控制台里的键名到代码里,别手敲出错。
内容的提问来源于stack exchange,提问作者stage
相关产品推荐
相关产品推荐

