如何使用firebase回收器适配器加载好友帖子

时间:2018-03-14 15:30:59

标签: android firebase

我正在构建一个社交应用。我需要使用firebase回收器适配器在主Feed中显示朋友帖子。我尝试了很多选项,但我无法做到这一点,下面的代码我只能加载当前用户的帖子。我在这里粘贴代码请指导我这方面。

我正在使用2个查询,一个用于朋友,另一个用于帖子

两个数据库引用如下

mUsersPostsDatabase = FirebaseDatabase.getInstance().getReference().child("posts"); 

mFriendsDatabase= FirebaseDatabase.getInstance().getReference().child("Friends").child(current_user_id);

方法如下

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

            Query posts = mUsersPostsDatabase
                    .orderByChild("user_id")
                    .equalTo(mFriendsDatabase.getKey());

        FirebaseRecyclerAdapter<CurrentUserPosts, UsersViewHolder> firebaseRecyclerAdapter =
                new FirebaseRecyclerAdapter<CurrentUserPosts, UsersViewHolder>(
                        CurrentUserPosts.class,
                        R.layout.view_user_post_layout,
                        UsersViewHolder.class,
                        posts
                ) {
                    @Override
                    protected void populateViewHolder(UsersViewHolder usersViewHolder, CurrentUserPosts model, int position) {
                                usersViewHolder.setImage_url(model.getImage_url(), getApplicationContext());
                                usersViewHolder.setUser_image(model.getUser_image(), getApplicationContext());
                                usersViewHolder.setUser_name(model.getUser_name());
                                usersViewHolder.setDate_time(model.getDate_time());
                                usersViewHolder.setDescription(model.getDescription());
                    }

                };
        mUsersList.setAdapter(firebaseRecyclerAdapter);
    }

数据库节点如下所示

朋友---&gt; current_user_id ----&gt; friend_id

帖子----&gt; post_id ----&gt; date,user_id,image_url,descp ......

1 个答案:

答案 0 :(得分:0)

Query friends = FirebaseDatabase.getInstance().getReference().child("Friends").child(mAuth.getCurrentUser().getUid());

friends.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

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

            String friendID = ds.getRef().getKey().toString();

            Query posts = FirebaseDatabase.getInstance().getReference()
                    .child("posts").orderByChild("user_id").equalTo(friendID);

            posts.addListenerForSingleValueEvent(new ValueEventListener() {

                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

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

                        CurrentUserPosts newPost = new CurrentUserPosts();

                        newPost.setImage_url(singleSnapshot.child("image_url").getValue(String.class));

                        mPosts.add(newPost);
                    }
                    Collections.reverse(mPosts);
                    mUsersList.setAdapter(new UsersPostsThumbAdapter(mPosts));

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    String errormsg = databaseError.toString();
                    Toast.makeText(getApplicationContext(), errormsg, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});