【问题标题】:Android firebase value event listener nested inside another listener fetching data in an abnormal way嵌套在另一个侦听器中的 Android Firebase 值事件侦听器以异常方式获取数据
【发布时间】:2017-12-24 21:05:10
【问题描述】:

这是我在 Stackoverflow 中的第一个问题。 我在我的 android 应用中使用 firebase,我的 DB 架构如下:

用户架构:

帖子架构:

现在,我使用了 recyclerview 来显示用户的帖子。我已经实现了 SingleValueEventListener,我在其中获取用户的帖子列表和嵌套在其中的另一个事件监听器以获取用户的姓名和个人资料图片。

代码如下:

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) {
            }
        });

现在,问题是嵌套侦听器获取的第一个用户 ID,它首先从该特定用户 ID 获取所有帖子,然后继续到下一个用户 ID,例如,如果它获取用户 ID:1,那么它将给出所有首先来自该用户的帖子,然后继续下一个,如果它的 UserID :2,反之亦然。我想要与该帖子关联的用户 ID 的帖子数据。

我已经实现了.orderByKey(),但没有成功。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 2018-02-26
      • 2018-09-04
      • 2021-10-30
      相关资源
      最近更新 更多