Android Studio:如何在Firebase中展示除本人及关注用户外的所有帖子
实现思路
- 先异步拉取当前登录用户的关注列表,缓存到全局变量中
- 关注列表加载完成后再触发帖子拉取逻辑,避免过滤时关注列表未初始化导致判断失效
- 调整帖子过滤规则:仅保留发布者既不是当前用户、也不在关注列表内的帖子
完整实现代码
首先在类中声明全局变量:
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
相关产品推荐
相关产品推荐

