You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:28:57