gpt4 book ai didi

java - 根据 ID 读取实际的 Firebase 记录

转载 作者:行者123 更新时间:2023-12-02 11:26:31 24 4
gpt4 key购买 nike

假设我有一个 Firebase Realtime 数据库结构,其中有用户节点,每个用户节点都有仅包含帖子 ID 的帖子节点。然后还有实际帖子所在的单独帖子节点(平面数据结构)。结构详细描述见 this answer

现在,如果我可以通过将监听器附加到每个用户的帖子节点来获取该用户帖子的 ID,那么如何检索帖子本身(来自帖子节点的完整信息)?我知道没有任何查询可以传递一堆 key 并获取关联的记录。我应该将监听器附加到我感兴趣的每个帖子节点吗?我目前担心可能会出现一些严重的性能问题,因为帖子数量实际上是无限的。

最佳答案

使用与此 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);

关于java - 根据 ID 读取实际的 Firebase 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49586833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com