Android firebase值事件侦听器嵌套在另一个侦听器内,以异常方式获取数据

时间:2017-09-10 17:31:42

标签: android firebase firebase-realtime-database android-recyclerview

这是我在Stackoverflow中的第一个问题。 我在我的Android应用程序中使用firebase,我的数据库架构如下:

用户架构:

Users schema

帖子架构:

Posts schema

现在,我使用了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()但没有成功。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将帖子ID放在用户数据下,例如

用户 - > 1 - >帖子 - > [帖子ID-1,帖子ID-2,帖子ID-3]