繁体   English   中英

如何在Firebase听很多孩子?

[英]how to listen to many childs in Firebase?

所以这是我的Firebase结构如下:

firebase-url/users/
                 /user-id/
                      posts
                      profile
                      relations
                 /user-id/
                      posts
                      profile
                      relations

每个用户都有自己的帖子,假设有2个用户。 用户AB. 如果A与B有关系,那么两者都可以看到彼此的帖子并听取更新。 A听B帖时情况很简单,但A可能与B,C,D等其他用户有关系

我检查了其他线程像这个这个 ,但没有我的问题明确简单的解决方案,例如第一个线程正要听常数孩子的,这是不是一个大问题。

怎么能听A多个用户帖子更新? 特别是当用户数量大且超过10或20时。

为此,您需要重新构建数据库。 这是如何做到的。

firebase-url
    |
    --- users
    |     |
    |     ---- userId_1
    |     |       |
    |     |       ---- userName: "John"
    |     |       |
    |     |       ---- userAge: 30
    |     |       |
    |     |       ---- posts
    |     |              |
    |     |              ---- post_1 : true
    |     |              |
    |     |              ---- post_2 : true
    |     |
    |     ---- userId_2
    |             |
    |             ---- userName: "Anna"
    |             |
    |             ---- userAge: 25
    |             |
    |             ---- posts
    |                    |
    |                    ---- post_3 : true
    |                    |
    |                    ---- post_4 : true
    |
    ---- posts
           |
           ---- postId_1
                   |
                   ---- postName: "post_1"
                   |
                   ---- users
                          |
                          ---- userId_1: true
                          |
                          ---- userId_2: true

通过这种方式,您可以非常简单地查询数据库,以显示有权访问单个帖子的所有用户: firebase-url/posts/postId/users/以及用户可以阅读的所有帖子: firebase-url/users/userId/posts/

希望能帮助到你。

倾听价值事件

ValueEventListener onDataChange()读取并侦听路径的整个内容的更改。

您可以使用onDataChange()方法读取给定路径中内容的静态快照,因为它们在事件发生时存在。 连接侦听器时会触发此方法,每次包括子项在内的数据发生更改时,都会触发此方法。 事件回调传递一个快照,其中包含该位置的所有数据,包括子数据。 如果没有数据,则返回的快照为空。

ValueEventListener postListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // Get Post object and use the values to update the UI
        Post post = dataSnapshot.getValue(Post.class);
        // ...
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        // ...
    }
    };
mPostReference.addValueEventListener(postListener);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM