Firebase实时数据库似乎会在添加或删除新项目等时通知我。这很好,但如何获取之前通知我的所有现有项目?
例如,假设我的应用程序列出了数据库中的项目。我第一次启动了我的应用程序。然后创建了“项目1”和“项目2”。Firebase通知我“项目1”和“项目2”,因此我将它们添加到我的应用程序列表中。
现在,我的应用程序已关闭并重新启动。如果创建了新项目“项目3”,我会收到通知,但如何再次检索“项目1”和“项目2”?简而言之,我想再次显示所有项目。
我搜索过示例,但我能找到的所有示例都是获取事件,而不是“阅读全部”。
PS:我认为你们两个花时间解释。我误解了Firebase实时数据库的工作原理;我以为我只会在会话中收到一次新项目的通知。似乎addChildEventListener
只能通知我新项目,并且我可以使用addValueEventListener
及其dataSnapshot访问整个项目。
您得到的结果将取决于您的查询。如果您编写一个查询来检索所有项目,您将获得一个节点的所有元素,如下例的第一个块所示:
//Prefetch all the existing items for the node using a SingleValueEventListener
FirebaseDatabase.getInstance().getReference(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Fetches all the existing items
Iterable<DataSnapshot> snapshotIterable = dataSnapshot.getChildren();
for (DataSnapshot aSnapshotIterable : snapshotIterable) {
aSnapshotIterable.getValue(Item.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//Once you fetch all the existing items,add a listener on the last added item for realtime updates
FirebaseDatabase.getInstance().getReference(key).orderByKey().limitToLast(1).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> snapshotIterable = dataSnapshot.getChildren();
Iterator<DataSnapshot> snapshotIterator = snapshotIterable.iterator();
//Fetches the last added item
if (snapshotIterator.hasNext()) {
Item value = snapshotIterator.next().getValue(Item.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
要获取某一时刻节点中存在的所有项,即使是在重启应用程序之前或之后添加的,也需要< code >在该节点上附加一个侦听器。Firebase中的一切都与听众有关。这意味着您正在监听数据库中特定位置的每一个更改。因此,在任何时候,您都可以从数据库中获得特定节点的< code >数据快照。假设我们有一个如下所示的数据库:
Firebase-root
|
--- users
|
--- userId1
| |
| --- //details
|
--- userId2
|
--- //details
如果我们在用户
节点上附加一个侦听器,我们可以创建一个列表
,其中包含所有用户,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userId = ds.getKey();
list.add(userId);
Log.d("TAG", userId);
}
Log.d("TAG", list);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);
您的输出将是:
userId1
userId2
因此,使用此代码,您可以获取所有用户,即使他们是在重新启动应用程序之前添加的。您可以实时获取数据。
我有一个带有此模式的数据库: 我测试了这段代码,但我无法从数据库中获得任何消息。我会感谢你的帮助。
我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(
我正在一个聊天应用程序,其中消息存储在firebase实时数据库。现在,如果我创建一个如下所示的节点(Chats-Better-A-ID和-B-ID是自动生成的聊天室密钥),那么我想知道当用户S在聊天应用程序中打开与用户T聊天时,so数据库将只读取存储在Chats-Better-S-T-ID中的消息,而不会读取其他聊天室消息!?我说的对吗?如果是,那么它会降低定价吗? 或 如果我存储如下所示的数据
我正在尝试读取我的Flutter应用程序中的firebase实时数据库中的数据,并将其分配给模型类,但是,我在控制台中得到了以下错误。 下面是我到目前为止所做的代码 员工类别 我不知道我做错了什么,请帮我解决这个问题
我试图从Firebase数据库中读取数据,我已经到处阅读和查找,但我已经走到了死胡同。 这就是我所做的一切。 依赖项: 实现'com.google.firebase: Firebase存储: 9.2.1' 实现'com。谷歌。firebase:firebase数据库:9.2。1' 实现'com。谷歌。firebase:firebase授权:9.2。1' 实现'com。谷歌。火基:火基核心:9.2。
我目前正在Android中使用静态编程语言进行培训,每当我试图访问Firebase数据库中当前的数据时都会遇到问题。下面是数据库中的数据: 数据库映像 之后,在将应用程序链接到Firebase之后,我刚刚创建了一个包含所有必需导入的主活动,但不幸的是,每当我执行应用程序并按下按钮时,什么都没有发生。 日志没有出现任何时间,它真的很烦人,因为我在留档中搜索,据我所知,这是我应该做的一切(我还检查了数