将新数据添加到实时数据库是不是有任何错误?
Posted
技术标签:
【中文标题】将新数据添加到实时数据库是不是有任何错误?【英文标题】:Is there any error for adding a new data to realtime database?将新数据添加到实时数据库是否有任何错误? 【发布时间】:2021-12-25 19:52:48 【问题描述】: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的实时数据库没有添加任何数据。我也加了OnFailureListener和OnCanceledListener,但是都没有检测到错误。 虽然没有报错,但是数据库并没有添加任何新数据
【问题讨论】:
也添加一个OnFailureListener
并检查你遇到了什么错误
是的,它不会抛出失败,因为它是一个异步函数。
【参考方案1】:
将数据写入实时数据库时无需使用 try-catch。 DatabaseReference#setValue(Object value) 返回一个 Task 类型的对象。话虽如此,您可以使用addOnCompleteListener() 检查任务是否成功或是否因异常而失败。在代码中,应该是这样的:
cDatabaseRef.child("Customers").child(uid).setValue(newCustomer).addOnCompleteListener task ->
if (task.isSuccessful)
Log.d(TAG, "Data written successfully.")
else
task.exception?.message?.let
Log.d(TAG, it)
【讨论】:
其实问题是实时数据库没有添加任何东西 您是否尝试过上述解决方案? else部分被触发了吗? 不适合它。邮箱和密码成功加入认证,但实时数据库没有得到任何数据 好的,但是我已经问过您是否尝试过我的回答中的解决方案。 else部分被触发了吗? 两者都不触发【参考方案2】:问题是实时数据库的 URL 不包含在 jason 文件中,这可能是因为我在创建实时数据库之前包含了 jason 文件。解决方法如下
cDatabaseRef = FirebaseDatabase.getInstance("AddingURL from firebase realtime database").getReference()
【讨论】:
以上是关于将新数据添加到实时数据库是不是有任何错误?的主要内容,如果未能解决你的问题,请参考以下文章
带有 Flutter 的实时数据库覆盖数据而不是将其添加到现有节点
为啥在使用 kotlin 将数据添加到 firebase 实时数据库时会得到重复值?
如何将新数据从实时数据库推送到 Cloud Firestore?