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

向Firebase Realtime Database新增数据无报错也未写入是什么原因?

private lateinit var cDatabaseRef: DatabaseReference

private fun addUserToDatabase (uid:String,custID:String,custName:String,custPostAddress:String,custPhoneNumber:String,email:String){
       try{
            cDatabaseRef = FirebaseDatabase.getInstance().getReference()
            val newCustomer = Customer(custName,email,custID,custPostAddress,custPhoneNumber,uid)
            cDatabaseRef.child("Customers").child(uid).setValue(newCustomer).addOnSuccessListener { 
                Toast.makeText(this, "Success added", Toast.LENGTH_SHORT).show()
                val intent = Intent(this, CustLoginActivity::class.java)
                finish()
                startActivity(intent)
            }
        } catch(e : Exception){
            Toast.makeText(this, "Some error occurred", Toast.LENGTH_SHORT).show()
        }
    }

排查解决步骤

  • 检查实时数据库安全规则
    初始状态下Firebase实时数据库默认规则会拒绝所有读写请求,只有完成身份认证的用户才能操作。你可以先临时将规则修改为以下内容测试写入能力,验证通过后再调整为符合业务安全要求的规则:

    {
      "rules": {
        "Customers": {
          ".write": true,
          ".read": true
        }
      }
    }
    
  • 检查数据库实例初始化配置
    如果你的Firebase数据库创建在非美西默认区域,仅调用FirebaseDatabase.getInstance()无法获取到正确的实例,需要传入完整的数据库URL进行初始化:

    // 替换为你Firebase控制台中显示的数据库完整地址
    cDatabaseRef = FirebaseDatabase.getInstance("https://你的数据库实例ID.firebaseio.com").getReference()
    
  • 检查网络权限与项目配置
    确认AndroidManifest.xml中已添加网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

    同时确认项目中google-services.json文件和当前使用的Firebase项目匹配,包名、SHA-1签名配置正确。

  • 检查入参合法性
    确认传入的uid参数不包含Firebase禁止的特殊字符:.、#、$、[、],上述字符无法作为数据库子节点名称,会导致写入静默失败。

  • 验证回调上下文有效性
    如果调用addUserToDatabase方法后当前Activity快速被销毁,会导致回调无法正常触发,建议在回调中添加Logcat日志替代仅依赖Toast判断回调是否执行,排除页面销毁导致的回调丢失问题。

内容的提问来源于stack exchange,提问作者student aaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:05