📌  相关文章
📜  Firebase 实时数据库与 Android 中的操作示例(1)

📅  最后修改于: 2023-12-03 15:30:46.167000             🧑  作者: Mango

Firebase 实时数据库与 Android 中的操作示例

Firebase 实时数据库是 Google 公司提供的一种 NoSQL 数据库服务,支持实时同步数据,适用于多平台应用程序。官方提供了许多适用于各种编程语言的 API,而本文将介绍如何在 Android 应用程序中使用 Firebase 实时数据库。

准备工作

在开始之前,需要在 Firebase 控制台中创建一个项目并启用实时数据库服务。同时需要添加到你的 app 级别的 build.gradle 文件中:

implementation 'com.google.firebase:firebase-database:19.2.0'

在这样做之前,需要确保已经在项目中集成了 Firebase。

读取数据

要从 Firebase 实时数据库读取数据,需要先获取到对数据库的引用,然后使用该引用查询数据。以下是一个例子,它将读取名为“users”的数据:

DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("users");
mDatabaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // 处理数据
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // 处理错误
    }
});

在上述代码中,我们首先使用 FirebaseDatabase.getInstance().getReference() 获取到对数据库的引用,然后使用 child() 方法指定要读取的数据。接下来使用 addListenerForSingleValueEvent() 方法添加一个值事件监听器。该监听器只会在值发生更改时触发一次。

onDataChange() 方法中,我们可以处理数据。 DataSnapshot 对象包含所有数据,并提供了一些方便的方法来获取数据。对于上面的例子, dataSnapshot.getValue() 将返回包含所有用户的 Map 对象。

写入数据

要向 Firebase 实时数据库中写入数据,需要先获取到对数据库的引用,然后使用该引用可以创建新节点或编辑现有节点。以下是一个例子,它将向名为“users”的节点写入一个新的用户:

DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("users");
String userId = mDatabaseRef.push().getKey();
User newUser = new User("Alice", "alice@example.com", 25);

Map<String, Object> userValues = newUser.toMap();
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/" + userId, userValues);

mDatabaseRef.updateChildren(childUpdates)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // 处理完成事件
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // 处理失败事件
            }
        });

在上述代码中,我们首先使用 FirebaseDatabase.getInstance().getReference() 获取到对数据库的引用,然后使用 child() 方法指定要修改的数据。接着,使用 push() 方法生成一个唯一的键,然后使用它来创建新节点。

在这里我们为 User 对象创建了一个辅助方法 toMap()

public class User {
    public String name;
    public String email;
    public int age;

    public User() {}

    public User(String name, String email, int age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }

    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("name", name);
        result.put("email", email);
        result.put("age", age);

        return result;
    }
}

用于将一个 User 对象转换成一个 Map 对象。

最后,使用 updateChildren() 方法来更新数据。 addOnCompleteListener() 方法指定当操作完成时执行的代码,而 addOnFailureListener() 方法则指定失败时执行的代码。

实时更新数据

要在 Firebase 实时数据库中实时更新数据,需要使用 addValueEventListener() 方法。以下是一个例子,它将监视名为“scores”的节点,以获取任何更改并立即更新应用程序:

DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("scores");
mDatabaseRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // 处理数据
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // 处理错误
    }
});

在上述代码中,我们首先使用 FirebaseDatabase.getInstance().getReference() 获取到对数据库的引用,然后使用 child() 方法指定要监视的数据。接下来,使用 addValueEventListener() 方法添加一个值事件监听器。该监听器将在任何数值更改时触发,既包括初始化数据,也包括后续更改。

onDataChange() 方法中,我们可以处理数据。 DataSnapshot 对象包含所有数据,并提供了一些方便的方法来获取数据。对于上面的例子, dataSnapshot.getValue() 将返回包含所有得分的 Map 对象。

注意,在使用 addValueEventListener() 方法时,需要注意不要忘记在适当的时候移除监听器以避免资源浪费。

结语

本文介绍了如何在 Android 应用程序中使用 Firebase 实时数据库。本文介绍了读取、写入和实时更新数据的方法。如果你对 Firebase 实时数据库和 Android 更深入的使用感兴趣,建议查看更多的官方文档和代码示例。