这是我在Stackoverflow中的第一个问题。 我在我的Android应用程序中使用firebase,我的数据库架构如下:
用户架构:
和
帖子架构:
现在,我使用了recyclerview来显示用户的帖子。我已经实现了SingleValueEventListener,其中我获取了用户的帖子列表以及嵌套在其中的另一个eventlistener来获取用户的姓名和个人资料图片。
代码如下:
Query query = databaseReference.child("Posts");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren())
{
final PostsPOJO postsPOJO = data.getValue(PostsPOJO.class);
images = postsPOJO.getcontent_post();
//Nested listener to fetch User's name and profile picture from another node "Users/UserID"
final Query userDetails = databaseReference.child("Users/"+postsPOJO.getUserID());
mListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot1) {
String username = dataSnapshot1.child("Username").getValue(String.class);
String profilePicturePath = dataSnapshot1.child("ProfilePicture").getValue(String.class);
list.add(new PostsPOJO(postsPOJO.getUserID(),profilePicturePath ,username, postsPOJO.getTimestamp(),postsPOJO.getPostText(),postsPOJO.getLocation(),postsPOJO.getcontent_post()));
Log.d("datalist", postsPOJO.getUserID()+","+profilePicturePath +","+username+","+postsPOJO.getTimestamp()+","+postsPOJO.getPostText()+","+postsPOJO.getLocation()+","+postsPOJO.getcontent_post());
newsFeedListAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
userDetails.addListenerForSingleValueEvent(mListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
现在,问题是嵌套侦听器获取的第一个UserID,它首先从该特定UserID获取所有帖子,然后继续下一个UserID,例如,如果它获得UserID:1,那么它将全部给出首先来自该用户的帖子然后继续下一个帖子,如果其UserID:2,反之亦然。我希望通过与该帖子关联的UserID获得帖子数据。
我已经实施了.orderByKey()
但没有成功。
谢谢。
答案 0 :(得分:0)
您可以将帖子ID放在用户数据下,例如
用户 - > 1 - >帖子 - > [帖子ID-1,帖子ID-2,帖子ID-3]