【问题标题】:Firebase get post of the following user onlyFirebase 仅获取以下用户的帖子
【发布时间】:2018-04-03 16:18:05
【问题描述】:

我想显示某个 id 关注的用户的帖子。 我正在使用 FirebaseRecyclerAdapter 来获取帖子。

我的数据库id结构如下是json

"Allposts" : {

"-LnDkoPgr0fPAUSnackF" : {
  "author" : "jack",
  "postimage" : "posturl",
  "profile" : "profileurl",
  "uid" : "8WZ6jPIvVuNUEjR1G1ewEPpr2Ln2"
},
"-Lnll3vNF8wABv899SoQ" : {
  "author" : "merry",
  "postimage" : "posturl",
  "profile" : "profileurl",
  "uid" : "KOag2Br7MOaJqJNSFbcTD3ljEnh2"
}

"Users" : {
    "8WZ6jPIvVuNUEjR1G1ewEPpr2Ln2" : {
      "following" : {
        "KOag2Br7MOaJqJNSFbcTD3ljEnh2" : true
      },
      "name" : "username",
      "posts" : {
        "-KnDkoPdke4p4Ns8NUkR" : true
      },

      "profilepic" : "profileurl",
      "userName" : "username"
    },
    "KOag2Br7MOaJqJNSFbcTD3ljEnh2" : {

      "following" : {
        "8WZ6jPIvVuNUEjR1G1ewEPpr2Ln2" : true,
        "KOag2Br7MOaJqJNSFbcTD3ljEnh2" : true
      },
      "name" : "name",
      "posts" : {
        "-KnDl3vFUlSxyRm0z547" : true
      },
      "profilepic" : "profileurl",
      "userName" : "username"
    }
  },

"UsersPost" : {
    "8WZ6jPIvVuNUEjR1G1ewEPpr2Ln2" : {
      "-KnDkoPdke4p4Ns8NUkR" : {
        "author" : "jack",
        "full_url" : "posturl",
        "profile" : "profileurl",
        "uid" : "8WZ6jPIvVuNUEjR1G1ewEPpr2Ln2"
      }
    },
    "KOag2Br7MOaJqJNSFbcTD3ljEnh2" : {
      "-KnDl3vFUlSxyRm0z547" : {
        "author" : "marry",
        "full_url" : "posturl",
        "profile" : profileurl",
        "uid" : "KOag2Br7MOaJqJNSFbcTD3ljEnh2"
      }
    }
  },

},

我正在使用以下方法获取以下帖子

mFollowing = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUser).child("following");
mDatabase = FirebaseDatabase.getInstance().getReference().child("UsersPost");

protected void onStart() {
        super.onStart();

        mFollowing.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for(DataSnapshot following : dataSnapshot.getChildren()){

                   DatabaseReference ref =  mDatabase.child(following.getKey());
                    mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class,
                            R.layout.post_item,PostViewHolder.class,ref) {
                        @Override
                        protected void populateViewHolder(PostViewHolder viewHolder, Post model, int position) {
                            viewHolder.bindToPost(model);
                        }
                    };
                    mRecyclerView.setAdapter(mAdapter);
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}

但它只显示最后一个用户的帖子:

Users {
    following {
        userid (1)
        userid (2)
        userid (3)
    }
}

仅显示 uid 3 的帖子,不显示 uid 1 和 2 的帖子

如何在以下节点下显示所有用户的帖子?

【问题讨论】:

  • 任何人请给出答案...

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


【解决方案1】:

您需要从for loop 中取出mRecyclerView.setAdapter(mAdapter); 并将其放在for 循环结束后。

希望对你有帮助。

【讨论】:

  • 我做到了,但仍然没有工作你有没有其他想法只获得用户关注的帖子?
  • 没有开发者回答?
  • 这是一个专家在这里没有任何答案的问题
  • 尝试从 for 循环中取出这行 DatabaseReference ref = mDatabase.child(following.getKey());
  • 我们该怎么做呢?我认为它将无法在外部循环中访问
【解决方案2】:

你不需要datasnapshot本身。这应该可以正常工作,因为您使用的是FirebaseRecyclerAdapter

mFollowing = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUser).child("following");
mDatabase = FirebaseDatabase.getInstance().getReference().child("UsersPost");

protected void onStart() {
        super.onStart();    

DatabaseReference ref =  mDatabase.child(following.getKey());
                    mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class,
                            R.layout.post_item,PostViewHolder.class,ref) {
                        @Override
                        protected void populateViewHolder(PostViewHolder viewHolder, Post model, int position) {
                            viewHolder.bindToPost(model);
                        }
                    };
                    mRecyclerView.setAdapter(mAdapter);
                }

  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 2017-11-26
    • 1970-01-01
    • 2019-11-13
    • 2018-11-20
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多