📅  最后修改于: 2023-12-03 15:30:46.167000             🧑  作者: Mango
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 更深入的使用感兴趣,建议查看更多的官方文档和代码示例。