Firebase Realtime Database不存数据无报错,已开读写权限仍无法写入用户信息?
Firebase Realtime Database写入回调成功但无数据的常见原因及解决方案
- 实例区域不匹配
如果你创建Realtime Database时选择的不是默认的us-central1区域(比如亚太、欧洲区域),直接调用FirebaseDatabase.getInstance()会默认指向美国区域的空实例,数据实际写入了非目标实例,自然在当前项目控制台看不到数据,且不会抛出错误。
修复方案:将你的数据库完整URL传入getInstance方法,示例:
数据库完整URL可以在Firebase控制台Realtime Database的首页直接复制。FirebaseDatabase.getInstance("https://你的数据库ID.对应区域.firebasedatabase.app") - User实体类不符合序列化要求
Firebase Realtime Database序列化Java实体类有强制要求:- 必须包含一个
public的无参构造方法 - 要序列化的成员变量要么是
public修饰,要么提供对应的public getter方法
如果不符合上述要求,会出现写入空结构/数据丢失的情况,部分场景下回调仍会返回成功。
修复方案:检查你的User类,补充无参构造、对应字段的getter方法即可。
- 必须包含一个
- 路径大小写敏感导致查找错误
Realtime Database的路径是大小写敏感的,你的代码中写入的路径是Users(首字母大写),如果在控制台查找时误找小写的users路径,会出现找不到数据的情况。
修复方案:核对控制台路径和代码中写入的路径大小写完全一致。 - 项目配置不匹配
你本地App集成用的google-services.json文件,和你当前查看的Firebase控制台项目不属于同一个项目时,数据会写入其他项目的数据库中,当前项目自然看不到数据。
修复方案:重新下载当前项目的google-services.json替换到App工程中,重新打包测试。 - 规则未正式发布
如果你修改完数据库规则后没有点击控制台规则页面的「发布」按钮,规则不会生效,不过该场景下通常会返回权限错误,可作为排查项核对。
内容的提问来源于stack exchange,提问作者Hager Khaled
相关产品推荐
相关产品推荐

