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
相关产品推荐
相关产品推荐

