gpt4 book ai didi

android - 在 Firebase 中获取用户 friend 的最新帖子的最佳方式

转载 作者:行者123 更新时间:2023-11-30 00:13:49 25 4
gpt4 key购买 nike

在我的数据库中,每个用户都有 friend 。我需要获取用户好友的 50 个最后 帖子。请参阅以下 Firebase DB 中每个用户的帖子结构。

那么什么是最佳方式呢?例如,如果用户有 150 个 friend ,那么我的 Android 应用程序应该有与 friend 一样多的听众。应用程序中有 150 个或更多 DB 监听器是否可以?还有什么方法可以在一次查询中获取所有 friend 的帖子?谢谢。

root
- posts
- {userUid}
- {postUid}
- text
- dateCreated

最佳答案

您可以拥有任意数量的监听器,条件是根据 Activity 的生命周期移除它们。但在你的情况下,你不需要 150 个听众,你只需要一个。假设用户下的节点名为 friends,您可以在 friends 节点上附加一个监听器,然后使用以下方法迭代 DataSnapshot 对象getChildren() 方法。假设您的数据库看起来与此类似:

Firebase-root
|
--- users
|
--- uid1
|
--- friends
|
--- friendId1: true
|
--- friendId2: true

要获取与特定用户对应的所有好友,请使用以下代码:

String uid = firebaseAuth.getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference friendsRef = rootRef.child("users").child(uid).child(friends);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String friendId = ds.getKey();
Log.d("TAG", friendId);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
friendsRef.addListenerForSingleValueEvent(eventListener);

要获取所有用户的所有帖子,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("posts");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String uid = ds.getKey();

DatabaseReference uidRef = postsRef.child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
String text = dSnapshot.child("text").getValue(String.class);
long dateCreated = dSnapshot.child("dateCreated").getValue(Long.class);
Log.d("TAG", text + " / " + dateCreated)
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(eventListener);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
postsRef.addListenerForSingleValueEvent(valueEventListener);

关于android - 在 Firebase 中获取用户 friend 的最新帖子的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47656931/

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