阅读文档,当路径不存在时,似乎不会触发childEventListener。
这是一个问题,因为我想向用户显示没有数据的消息。
我可以添加一个像in this answer这样的valueEventListener,但是我将查询限制为最新值,即query.limitToLast(),而valueEventListener不限制toTolast,而是获取路径中的所有数据。
示例,我有:
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不会触发。
答案 0 :(得分:4)
如果您想同时处理子项和不存在子项的情况,您可以添加值和子侦听器:
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
}
});
});
答案 1 :(得分:0)
由于无法将侦听器附加到不存在的路径,因此您可以尝试向用户添加属性以设置他拥有的帖子数。向该属性添加一个侦听器,如果它发生更改,那么您确定用户确实在帖子中有路径引用,然后您可以向该节点添加一个侦听器,并在每次添加子项时都获取查询。 / p>