You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio:如何在Firebase中展示除本人及关注用户外的所有帖子

实现思路

  1. 先异步拉取当前登录用户的关注列表,缓存到全局变量中
  2. 关注列表加载完成后再触发帖子拉取逻辑,避免过滤时关注列表未初始化导致判断失效
  3. 调整帖子过滤规则:仅保留发布者既不是当前用户、也不在关注列表内的帖子

完整实现代码

首先在类中声明全局变量:

public final List<Post> mDefaultPost = new ArrayList<>();
private List<String> followingList = new ArrayList<>();
private FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

改造关注列表拉取方法,拉取完成后触发帖子加载:

private void loadFollowingThenLoadPosts() {
    DatabaseReference followRef = FirebaseDatabase.getInstance().getReference("Follow")
            .child(firebaseUser.getUid())
            .child("following");
    followRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            followingList.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                followingList.add(snapshot.getKey());
            }
            // 关注列表加载完成后再拉取帖子
            readDefaultPosts();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            // 可按需添加异常处理逻辑
        }
    });
}

修改帖子拉取方法的过滤规则:

public void readDefaultPosts() {
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("posts");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            mDefaultPost.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Post post = snapshot.getValue(Post.class);
                if (snapshot.child("ingrediant").getValue() != null) {
                    ArrayList<String> mList = new ArrayList();
                    for (DataSnapshot ds : snapshot.child("ingrediant").getChildren()) {
                        mList.add(ds.getKey() + ":" + ds.getValue());
                    }
                    post.setIngrediantsList(mList);
                }
                post.setVideo((Boolean) snapshot.child("isVideo").getValue());

                // 新增过滤条件:发布者不在关注列表内
                if(!post.getPublisher().equals(firebaseUser.getUid()) 
                    && !followingList.contains(post.getPublisher())) {
                    mDefaultPost.add(post);
                }
            }
            postDefaultAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            // 可按需添加异常处理逻辑
        }
    });
}

调用方式

页面初始化时直接调用loadFollowingThenLoadPosts()即可,后续关注列表更新、帖子更新都会自动触发列表刷新。


内容的提问来源于stack exchange,提问作者SSS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:36:04