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

Android Firebase中展示收藏用户列表问题:代码显示空白

解决Firebase展示收藏用户列表的问题

问题根源

你当前的代码逻辑存在错误:database.getReference().child("Favors").getKey()获取的是节点名称"Favors",并非你收藏的用户UID,导致条件永远不成立,最终列表空白。

正确实现步骤

假设你的Favors节点采用Firebase推荐的结构(当前用户UID下存储收藏用户的UID):

Favors
  - [当前用户UID]
    - [收藏用户UID1]: true
    - [收藏用户UID2]: true

你需要先获取当前用户的收藏UID列表,再从users节点中筛选出对应用户:

// 获取当前用户UID
String currentUid = FirebaseAuth.getInstance().getUid();
if (currentUid == null) return;

// 第一步:获取当前用户的收藏UID列表
database.getReference().child("Favors").child(currentUid).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot favorSnapshot) {
        Set<String> favorUids = new HashSet<>();
        for (DataSnapshot snap : favorSnapshot.getChildren()) {
            favorUids.add(snap.getKey());
        }

        // 第二步:遍历users节点,筛选收藏用户
        database.getReference().child("users").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot userSnapshot) {
                users.clear();
                for (DataSnapshot snap : userSnapshot.getChildren()) {
                    User user = snap.getValue(User.class);
                    if (user == null) continue;

                    // 排除自身,且UID在收藏列表内
                    if (!user.getUid().equals(currentUid) && favorUids.contains(user.getUid())) {
                        users.add(user);
                    }
                }
                binding.recyclerView.hideShimmerAdapter();
                usersAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                // 处理数据库读取错误
            }
        });
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 处理数据库读取错误
    }
});

优化建议

如果不需要实时更新收藏列表,可将addValueEventListener替换为addListenerForSingleValueEvent,减少不必要的监听开销:

// 使用一次性监听替代实时监听
database.getReference().child("Favors").child(currentUid).addListenerForSingleValueEvent(...);
database.getReference().child("users").addListenerForSingleValueEvent(...);

结构适配说明

若你的Favors节点结构与示例不同(如直接存储数组),需调整收藏UID的收集逻辑,但Firebase官方不推荐使用数组存储列表,键值对结构更便于查询和维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:01:13