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

如何修改代码实现展示所有注册用户及关注用户的Firebase帖子

问题根因

  • 你的原有代码查询路径为FirebaseDatabase.getInstance().reference.child("Catalog").child(uid!!),直接限定了仅拉取当前登录用户自己发布的帖子,自然无法获取其他用户的内容
  • 原有筛选逻辑仅匹配关注列表用户,未覆盖所有注册用户的展示需求,同时列表刷新方法放在内层循环中,会频繁触发界面重绘,存在性能问题

修正后Kotlin代码

参考你提供的数据库结构,Catalog节点下第一级是所有发布帖子的用户UID,每个UID节点下存储对应用户发布的所有帖子,我们需要遍历全量用户的帖子数据再做筛选:

private fun retrievePosts() {
    progressBar!!.visibility = View.VISIBLE
    // 直接查询整个Catalog节点,获取所有用户的全量帖子
    val postsRef = FirebaseDatabase.getInstance().reference.child("Catalog")
    postsRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(p0: DataSnapshot) {
            val tempList = arrayListOf<ModelPost>()
            // 第一层遍历:所有发布过帖子的用户节点
            for (userSnapshot in p0.children) {
                // 第二层遍历:单个用户的所有帖子
                for (postSnapshot in userSnapshot.children) {
                    val post = postSnapshot.getValue(ModelPost::class.java) ?: continue
                    // 此处为筛选逻辑:所有注册用户的帖子都展示
                    tempList.add(post)
                    // 如果你后续需要调整为仅展示关注用户+自己的帖子,把上面的add替换为下面的判断即可
                    // if (followingList.contains(post.getUid()) || post.getUid() == uid) tempList.add(post)
                }
            }
            // 统一更新列表,避免频繁刷新
            postList.clear()
            postList.addAll(tempList)
            adapterPost!!.notifyDataSetChanged()
            progressBar!!.visibility = View.GONE
        }

        override fun onCancelled(p0: DatabaseError) {
            progressBar!!.visibility = View.GONE
        }
    })
}

Java版本参考代码

private void retrievePosts() {
    progressBar.setVisibility(View.VISIBLE);
    DatabaseReference postsRef = FirebaseDatabase.getInstance().getReference().child("Catalog");
    postsRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            ArrayList<ModelPost> tempList = new ArrayList<>();
            for (DataSnapshot userSnapshot : snapshot.getChildren()) {
                for (DataSnapshot postSnapshot : userSnapshot.getChildren()) {
                    ModelPost post = postSnapshot.getValue(ModelPost.class);
                    if (post == null) continue;
                    // 所有注册用户的帖子都加入列表
                    tempList.add(post);
                    // 仅展示关注用户+自己的帖子的判断逻辑
                    // if (followingList.contains(post.getUid()) || post.getUid().equals(uid)) tempList.add(post);
                }
            }
            postList.clear();
            postList.addAll(tempList);
            adapterPost.notifyDataSetChanged();
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            progressBar.setVisibility(View.GONE);
        }
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:04