我正在开发一个 Android 项目,并已成功集成 Firebase 实时数据库。为了测试数据是否保存在数据库中,我编写了以下代码:
information_ReadingBinding.testting.setOnClickListener {
Toast.makeText(this, "Hello user", Toast.LENGTH_LONG).show()
reference.child("Users").child("Welcome").setValue("Hello Firebase").addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d("Firebase", "Test data saved successfully.")
Toast.makeText(applicationContext, "Testing successful..", Toast.LENGTH_SHORT).show()
} else {
Log.e("Firebase", "Failed to save test data: ${task.exception?.message}")
Toast.makeText(applicationContext, "Failed to save data: ${task.exception?.message}", Toast.LENGTH_LONG).show()
}
}
}
当我点击按钮时,会显示Toast消息“Hello user”,但数据没有保存到数据库中。
addOnCompleteListener
块中的成功或失败消息不会被触发。
我做了什么:
按照 Android 版 Firebase 官方文档成功集成 Firebase。
确保 google-services.json 正确添加到我的项目中。
已验证 Firebase 依赖项是否包含在 build.gradle 文件中。
确认已在 Firebase 控制台中启用实时数据库。
检查了 Firebase 规则;目前,它们设置为允许读写访问:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
调试了应用程序并确认在单击之前没有记录任何错误。
但是数据没有保存到 Firebase 实时数据库中。
.addOnCompleteListener
中的成功或失败块没有被执行。
仅显示“Hello user”Toast 消息。
环境:
为什么setValue方法没有将数据保存到数据库? 我错过了什么或做错了什么?
我尝试过的:
已验证的 Firebase 配置:
按照Firebase的官方步骤集成实时数据库。
确保 google-services.json 位于应用程序目录中。
检查以下依赖项是否已添加到 build.gradle 文件中:
implementation 'com.google.firebase:firebase-database-ktx:20.0.6'
implementation 'com.google.firebase:firebase-auth-ktx:22.1.1'
暂时将数据库规则更改为:
{
"rules": {
".read": "true",
".write": "true"
}
}
这允许出于测试目的进行不受限制的访问。
调试:
添加了
Log.d()
语句来验证是否正在调用 setValue()
方法。
确认点击侦听器按预期工作,因为出现 Toast 消息“Hello user”。
重建和测试:
在 Android Studio 中清理并重建项目。 在测试设备上卸载并重新安装该应用程序以确保全新安装。 预期结果:
单击按钮时,数据(“Hello Firebase”)应写入 Firebase 实时数据库中的用户/欢迎路径。 如果成功,应用程序应显示 Toast 消息“测试成功..”。 如果出现错误,它应该记录错误消息并显示带有失败原因的 Toast
如果完成侦听器根本没有触发,这通常意味着您的客户端未连接到数据库服务器。通常这是因为所需的连接字符串丢失或错误。
因此,请从 Firebase 控制台再次重新下载
google-services.json
文件,并将该版本放入您的应用程序中。或者,您可以在首次尝试访问数据库之前在代码中设置数据库连接字符串,如 Firebase 文档中有关“写入数据库”的蓝色块中所述:
重要:要获取对 us-central1 默认数据库以外的数据库的引用,您必须将数据库 URL 传递给
getInstance()
(或对于 Kotlindatabase()
)。对于us-central1
默认数据库,您可以不带参数调用getInstance()
(或database
)。\您可以在 Firebase 控制台的实时数据库部分找到实时数据库 URL。根据数据库的位置,数据库 URL 将采用以下形式之一:https://DATABASE_NAME.firebaseio.com
(适用于
- (适用于所有其他位置的数据库)
us-central1
中的数据库)https://DATABASE_NAME.REGION.firebasedatabase.app
- 所以像这样:
val database = Firebase.database("<URL that you can copy from the Firebase console>")
然后您从该
reference
变量中获取 database
,以确保您正在与正确的数据库服务器通信。