我想做的是循环 firebase 数据库中的所有用户帖子并在回收器 View 中显示它,现在每个帖子都有一个用户 ID,为此我需要编写第二个查询来获取特定的用户名用户的帖子。
这是 json 的样子
到目前为止我所做的是这个
list = new ArrayList < > ();
newsFeedRecyclerView = (RecyclerView)
findViewById(R.id.news_feed_recyclerview);
newsFeedRecyclerView.setHasFixedSize(true);
newsFeedRecyclerView.setLayoutManager(new
LinearLayoutManager(this));
newsFeedListAdapter = new NewsFeedListAdapter(list,
images);
newsFeedRecyclerView.setAdapter(newsFeedListAdapter);
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();
Query userDetails = databaseReference.child("Users/" + postsPOJO.getUserID());
userDetails.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String username = dataSnapshot.child("Username").getValue(String.class);
String profilePicturePath = dataSnapshot.child("ProfilePicture").getValue(String.class);
list.add(new PostsPOJO(postsPOJO.getUserID(), profilePicturePath, username, postsPOJO.getTimestamp(), postsPOJO.getPostText(), postsPOJO.getLocation(), postsPOJO.getcontent_post()));
newsFeedListAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但这里的问题是,如果第二个帖子的用户不同,它会首先显示所有用户 ID 在前的帖子。 例如(如果 userid 1 = john 和 userid 2 = alex,它首先显示 john 的所有帖子,然后显示 alex 的帖子。
有人可以帮忙吗?
谢谢。
最佳答案
您的方法非常面向“关系数据库”。您不应该害怕对数据进行反规范化并多次写入相同的数据。
换句话说,不要将 UserId 放在您的 Post 节点下,只需放置您的用户的用户名。然后您只需循环一次即可列出带有用户名的帖子。
假设您要显示手机号码和帖子的用户名。您也可以在 Post 节点下写入手机号码,就像您为用户名所做的那样。同样,在一个循环中,您可以获得所需的一切。
关于android - 如何在 firebase 中编写两个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46267684/