当路径不存在时,Firebase childEventListener返回值

时间:2016-09-23 23:52:04

标签: android firebase firebase-realtime-database

阅读文档,当路径不存在时,似乎不会触发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不会触发。

2 个答案:

答案 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>