Firebase Realtime DB无法插入数据,是否需切换至SQLite?
问题
我的注册页面代码此前功能正常,但当前无法向Firebase Realtime DB插入数据:
FirebaseDatabase.getInstance().getReference("Users") .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ Toast.makeText(RegisterActivity.this, "Successful", Toast.LENGTH_LONG).show(); progressBar.setVisibility(View.GONE); } else { Toast.makeText(RegisterActivity.this, "Failed", Toast.LENGTH_LONG).show(); progressBar.setVisibility(View.GONE); } } });
我参考过教程,也尝试替换为Tools>Firebase>Realtime DB中的示例代码,以及使用getReferenceFromUrl()方法,均无效果。
我正在开发一款数独词汇游戏,目前需要存储用户数据,后续还需实现查询排行榜前10名分数的功能。请问是否应该切换至SQLite数据库?它似乎功能更全面,后续出现障碍的可能性更低。
回答
先排查Firebase写入失败的核心问题
- 先补充错误日志,替换失败分支的Toast,获取具体失败原因:
常见触发原因:数据库规则权限不足(默认规则可能限制了读写)、Toast.makeText(RegisterActivity.this, "Failed: " + task.getException().getMessage(), Toast.LENGTH_LONG).show();user对象序列化异常(比如缺少空构造函数、存在无法序列化的字段)、当前用户认证状态失效(getCurrentUser()返回null)、网络连接异常。 - 检查Firebase控制台的Realtime Database规则,确保认证用户拥有写入权限,测试阶段可临时设置:
{ "rules": { ".read": "auth != null", ".write": "auth != null" } } - 确认
FirebaseAuth.getInstance().getCurrentUser()不为null,避免空指针导致写入流程中断。
SQLite与Firebase的场景适配建议
- 若仅需本地存储用户数据、无需跨设备同步或云端排行榜,SQLite足够用:本地读写速度快,无需依赖网络,但所有增删改查、排行榜排序逻辑都需要自行实现。
- 若要实现云端排行榜、用户数据跨设备同步、省去后端开发成本,Firebase更适配你的游戏场景:Realtime Database支持实时更新排行榜,通过
orderByChild("score").limitToLast(10)即可快速获取前10高分用户,还能配合Firebase Auth完成用户认证,无需搭建额外后端服务。 - 你的核心需求是游戏排行榜,Firebase的云端能力更匹配,建议先解决当前写入失败问题,无需直接切换到SQLite。
内容的提问来源于stack exchange,提问作者AmphoricBlue
相关产品推荐
相关产品推荐

