使用Firebase Database的setValue更新数据时遇错误求助
解决Firebase Database setValue更新失败的问题
我来帮你排查这个写入失败的问题~结合你给出的错误截图、代码和Gradle配置,大概率是版本兼容或者数据库规则的问题,咱们一步步来解决:
1. 先统一Firebase依赖版本
你现在的Gradle里,Firebase Auth用的是15.1.0,但Database是15.0.0,版本不一致很容易导致内部依赖冲突,这是这类报错的常见诱因。把两个组件的版本统一成一样的就行:
implementation 'com.google.firebase:firebase-auth:15.1.0' implementation 'com.google.firebase:firebase-database:15.1.0'
改完记得同步Gradle,再测试写入操作。
2. 检查数据库的读写规则
如果版本统一后还是不行,就得看看Firebase数据库的规则是不是限制了写入权限。默认规则是只允许已认证的用户读写,但如果配置有误也会失败。你可以先临时改成公开规则测试(上线前一定要改回安全规则!):
{ "rules": { ".read": true, ".write": true } }
要是这样能成功写入,说明是规则的问题。之后记得把规则调整为符合你业务逻辑的安全版本,比如只允许用户修改自己的信息:
{ "rules": { "users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } } }
这个规则正好匹配你代码里写入users/{当前用户uid}节点的逻辑。
3. 给代码加个监听更方便排查
你的代码逻辑本身没问题,但可以加上成功/失败的监听,这样能直接拿到更详细的错误信息,比看日志更直观:
val database = FirebaseDatabase.getInstance() val ref = database.getReference("users").child(firebaseUser.uid) val userMap = mapOf( "username" to username.toLowerCase(), "email" to email, "rank" to 0, "message_count" to 0, "date_joined" to "N/A", "purchase" to false, "initial_payment_option" to "N/A", "current_payment_option" to "N/A", "subscription" to "N/A", "family_discount" to "N/A" ) ref.setValue(userMap) .addOnSuccessListener { // 这里可以加写入成功后的逻辑,比如跳转到主页 } .addOnFailureListener { error -> // 打印具体错误,方便定位问题 Log.e("FirebaseWriteError", "写入失败原因: ${error.message}") }
最后再确认下基础配置
别忘了检查项目里的google-services.json是不是正确放在了app目录下,还有项目级的Gradle有没有添加Firebase的插件,这些基础配置错了也会导致数据库操作失败哦。
内容的提问来源于stack exchange,提问作者CoderChick
相关产品推荐
相关产品推荐

