因此,我的Firebase结构如下所示:
firebase-url/users/
/user-id/
posts
profile
relations
/user-id/
posts
profile
relations
每个用户都有自己的帖子,假设有2个用户。用户 A 和 B 。 如果A与B有关系,那么两者都可以看到彼此的帖子并听取更新。 A听B帖时情况很简单,但A可能与B,C,D等其他用户有 n关系。
我检查了其他线程,例如this和this,但是对于我的问题没有一个明确的简单解决方案,例如第一个线程是关于监听恒定数量的子节点,这不是很大问题。
A 如何收听多个用户帖子更新?特别是当用户数量大且超过10或20时。
答案 0 :(得分:3)
要实现此目的,您需要重新构建数据库。这是如何做到的。
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/
希望它有所帮助。
答案 1 :(得分:0)
倾听价值事件
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);