向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
相关产品推荐
相关产品推荐

