Firebase:实时数据库读写

17 Mar 2025 | 5 分钟阅读

在本节中,我们将学习如何在 Android 应用程序中读写 Firebase 实时数据库。 在上一节中,我们创建了一个 Android 应用程序并添加了 Firebase。 我们已经实现了所有必需的库和插件。 我们之前创建了一个名为 fir-realtimedatabaseexam-60676 的数据库。

Firebase: Realtime Database Reading and Writing

写入数据库

在我们的代码中,我们必须使用 getInstance() 方法检索数据库的实例,然后引用我们要写入的位置。 我们必须记住数据库是围绕 JSON 节点组织的。

我们将把一个异步监听器附加到引用上。 监听器为数据的初始状态触发一次,并在数据发生变化的任何时候再次触发。

我们可以保存各种数据类型(字符串、长整型、双精度型和布尔型等)的数据库。 通过这种方式,我们可以保存 Kotlin 对象。 当我们保存一个对象时,任何 getter 的响应都将作为该位置的子节点和 JSON 格式保存。

一个定义用户为自定义 Java 对象的类,带有一个不带任何参数的默认构造函数,并具有公共 getter 用于要分配的属性。

编写一个对象 (User.kt, Signing.kt)

我们将编写一个实际的对象,即用户对象。 用户在我们的 User.kotlin 类和 Signing 或 register 活动中编写该对象。 因此,当我们使用 Kotlin 对象时,我们对象的内容会自动以嵌套方式映射到子位置。 使用该对象,我们使我们的代码更具可读性,更易于维护,并且很适合编写该对象。

我们可以使用 setVaue() 函数添加用户对象

我们可以使用 set value 方法来编写一个新用户。 我们仍然可以在不重写整个对象的情况下更新一个子节点。

读取数据库

要读取路径上的数据并监听任何更改(如果数据发生更改),我们必须使用 addValueEventListener() 或 addListenerForSingleValueEvent() 方法将 ValueEventListener 添加到数据库引用。 这两种方法都会将 valueEventListener 添加到 DatabaseReference 中。 

我们可以使用 onDataChange() 方法读取给定路径上内容的静态快照。 监听器附加时触发一次,并且每次数据更改时再次触发,包括子节点。 它传递一个包含该位置所有数据的快照,包括子数据。 如果没有数据,当我们调用 exists() 时,快照将返回 false,当我们调用 getValue() 时,快照将返回 null

在某些情况下,我们可能希望仅调用回调一次,然后立即将其删除。 这对于只需要加载一次并且不期望经常更改或需要主动监听的数据非常有用。 监听确实有一些开销,所以如果我们只需要读取一次,我们就不需要进行回调。

例如,当初始化我们不期望更改的用户界面元素时,但我们只想在需要读取数据的一部分时使用 addListenerForSingleValueEvent()。 它不会更改一次,而且只更改一次。

示例

我们正在实现一个 Android 应用程序。 这是一个用户登录和注册应用程序,它有三个 xml 文件和四个 Kotlin 文件。 activity_main.xml 用于注册页面。 activity_signing.xml 用于登录,activity_welcome.xml 用于从数据库检索数据。 类似地,有四个 Kotlin 文件,即 MainActivity、Signing、welcome 和 User。

当用户注册时,他们被添加到 firebase 控制台的用户部分,并且与他们对应的数据存储到数据库中。 登录功能与我们在身份验证部分中所做的一样。 当用户成功注册或注册后,他将切换到欢迎页面,在那里他会找到他的数据。

activity_main.xml、activity_signing 和 activity_welcome

Firebase: Realtime Database Reading and Writing

MainActivity.kt

welcome.kt

User.kt

Signing.kt

Firebase: Realtime Database Reading and Writing
Firebase: Realtime Database Reading and Writing