Firebase 实时数据库:尽管成功集成但数据未保存

问题描述 投票:0回答:1

我正在开发一个 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
块中的成功或失败消息不会被触发。

我做了什么:

  1. 按照 Android 版 Firebase 官方文档成功集成 Firebase。

  2. 确保 google-services.json 正确添加到我的项目中。

  3. 已验证 Firebase 依赖项是否包含在 build.gradle 文件中。

  4. 确认已在 Firebase 控制台中启用实时数据库。

  5. 检查了 Firebase 规则;目前,它们设置为允许读写访问:

    {
      "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }
    
  6. 调试了应用程序并确认在单击之前没有记录任何错误。

但是数据没有保存到 Firebase 实时数据库中。

.addOnCompleteListener
中的成功或失败块没有被执行。 仅显示“Hello user”Toast 消息。

环境:

  • Android Studio 火烈鸟 | 2022.2.1 补丁 2
  • Firebase 数据库 SDK 版本:20.0.6
  • Kotlin 版本:1.8.10
  • 在 Android 12 上测试。

为什么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

android firebase kotlin firebase-realtime-database
1个回答
0
投票

如果完成侦听器根本没有触发,这通常意味着您的客户端未连接到数据库服务器。通常这是因为所需的连接字符串丢失或错误。

因此,请从 Firebase 控制台再次重新下载

google-services.json
文件,并将该版本放入您的应用程序中。或者,您可以在首次尝试访问数据库之前在代码中设置数据库连接字符串,如 Firebase 文档中有关“写入数据库”的蓝色块中所述:

重要
:要获取对 us-central1 默认数据库以外的数据库的引用,您必须将数据库 URL 传递给

getInstance()(或对于 Kotlin database()

)。对于 
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

,以确保您正在与正确的数据库服务器通信。
	

© www.soinside.com 2019 - 2024. All rights reserved.