假设我有一个firebase实时数据库结构,其中有用户节点,并且每个用户节点都有仅包含发布ID的帖子节点。然后还有单独的帖子节点,其中实际帖子位于其中(平面数据结构(。该结构在中详细描述了此答案。
现在,如果我可以通过将侦听器附加到该用户的帖子节点来获取每个用户的帖子的ID,我该如何检索帖子自己(帖子节点的完整信息(?我知道没有任何疑问可以通过一堆键并获取关联的记录。我是否应该将听众附上我感兴趣的每个帖子节点?我目前担心可能存在一些严重的性能问题,因为帖子的数量实际上是无限的。
使用此 post 的精确数据库结构,为了解决问题,您需要两次查询数据库。一旦获得您需要的特定用户的帖子ID,其次就将其帖子自行置于帖子中。要实现这一目标,请使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("users").child(uid).child("posts");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String postId = ds.getKey();
DatabaseReference postIdRef = rootRef.child("posts").child(postId);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
String postName = dSnapshot.child("postName").getValue(String.class);
Log.d("TAG", postName);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
postIdRef.addListenerForSingleValueEvent(eventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
postsRef.addListenerForSingleValueEvent(valueEventListener);