使用addOnSuccessListener从Firebase读数据始终返回null求助
Firebase Realtime Database读取数据返回null的排查与解决
以下是针对问题的具体排查方向和解决方法:
核对数据库节点路径
从你提供的Firebase控制台截图来看,数据库中的用户节点是Users(复数形式),但你的代码里写的是database.child("User")(单数)。节点名称的单复数、大小写必须完全匹配,这是最常见的导致读取返回null的原因。建议将代码中的节点名称修正为和控制台一致的Users。检查数据库安全规则
如果你的数据库规则限制了未认证用户的读取权限,而当前App没有用户登录,会导致读取操作返回null。可以临时将规则改为测试模式(测试完成后务必改回安全规则):{ "rules": { ".read": true, ".write": true } }若修改后能正常读取数据,说明是权限配置问题,后续需要结合用户认证机制配置合理的安全规则。
验证Firebase配置与依赖
- 确认
google-services.json文件已正确放置在app模块根目录,且与Firebase控制台中当前项目的配置一致。 - 检查build.gradle中的Firebase依赖是否为最新稳定版本,例如Realtime Database的依赖:
implementation 'com.google.firebase:firebase-database-ktx:20.3.0'
- 确认
排查网络连接
Firebase Realtime Database需要正常的网络连接才能读取云端数据,确保测试设备可以访问外网,排除网络波动或限制导致的读取失败。打印Snapshot详细信息排查
修改代码,打印DataSnapshot的存在状态,辅助定位问题:database.child("Users").get().addOnSuccessListener { snapshot -> Log.i("firebase", "节点是否存在: ${snapshot.exists()}") if (snapshot.exists()) { Log.i("firebase", "获取到的数据: ${snapshot.value}") } else { Log.i("firebase", "目标节点不存在") } }.addOnFailureListener{ Log.e("firebase", "读取数据出错", it) }如果
snapshot.exists()返回false,说明代码中的节点路径确实与数据库实际节点不匹配。
内容的提问来源于stack exchange,提问作者Olof N
相关产品推荐
相关产品推荐

