gpt4 book ai didi

android - 路径不存在时 Firebase childEventListener 返回值

转载 作者:搜寻专家 更新时间:2023-11-01 07:48:07 25 4
gpt4 key购买 nike

阅读文档,当路径不存在时,childEventListener 似乎不会触发。

这是个问题,因为我想向用户显示没有数据的消息。

我可以添加像 in this answer 这样的 valueEventListener,但我将查询限制为最新值,即 query.limitToLast() 和 valueEventListener 不会限制 Tolast,但会获取路径中的所有数据。

例如,我有:

posts
{
$userid
{
$postid {
post_content:content
timestamp:1234567
}
$postid {
post_content:content
timestamp:1234567
}
$postid {
post_content:content
timestamp:1234567
}
$postid {
post_content:content
timestamp:1234567
}
}
}

我只对最新的帖子感兴趣,所以我做了 firebaseRef.child(users).child(userid).limitToLast(1).addChildEventListener 但用户可能还没有帖子和 childEventListener在这种情况下不会触发。

最佳答案

如果你想同时处理 child 和没有 child 存在的情况,你可以同时添加一个值和一个 child 监听器:

Query query = firebaseRef.child(users).child(userid).limitToLast(1);
query.addChildEventListener(new ChildEventListener() {
void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
...
}
...
});
query.addValueEventListener(new ValueEventListener() {
void onDataChange(DataSnapshot snapshot) {
if (!snapshot.exists()) {
// TODO: handle the "no data available" scenario
}
});
});

Firebase 客户端非常智能,即使在上述情况下有多个监听器,也只加载一次数据。


如果需要,您也可以使用一个 ValueEventListener 来完成此操作像这样:

query.addValueEventListener(new ValueEventListener() {
void onDataChange(DataSnapshot snapshot) {
if (!snapshot.exists()) {
// TODO: handle the "no data available" scenario
}
else {
for (DataSnapshot childSnapshot: snapshot.getChildren()) {
// TODO: handle the child snapshot
}
}
});
});

因为我们现在得到了snapshot中所有匹配的子节点,我们遍历 snapshot.getChildren()获得与 onChildAdded 中相同的数据.

关于android - 路径不存在时 Firebase childEventListener 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com