java - 如何使用 Firebase 实时数据库创建特定用户所有已保存帖子的列表?
问题描述
我有一个名为“帖子”的根节点。然后 Posts 中的每个节点都有一个由 push() 生成的唯一 postID。现在每个帖子都有几个孩子。一个这样的孩子是“保存”,我在其中存储了保存此特定帖子的那些用户的用户 ID。我想做的是创建并显示特定用户保存的所有帖子的列表。
这意味着我必须编写一个代码来滚动浏览“帖子”节点中的所有帖子,检查每个帖子中的“保存”子项(如果存在),然后检查“保存”中特定用户的用户 ID(如果存在)存在,则应将该帖子添加到名为“mySavedPosts”的列表中。
我尝试了许多不同的方法来实现这一点,但我只是得到一个空列表或应用程序崩溃。我不能发布我尝试过的所有不同方式,因为这会使这个问题变得非常冗长和笨拙,但我所有的方式都围绕着这种方法:
FirebaseDatabase.getInstance().getReference()
.child("Posts")
.child("saves")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
mySavedPosts.clear();
if (snapshot.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).exists()){
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
Post post = dataSnapshot.getValue(Post.class);
mySavedPosts.add(post);
}
}
Collections.reverse(mySavedPosts);
postAdapterSaves.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
我也尝试在 .child("Posts") 之后输入 .child(post.getPostID()) ,但这会生成空指针异常。我也尝试在 .child("saves") 之后输入 .child(auth.getUid()),但也没有用!我尝试了 10 次其他修改,但都没有奏效。
解决方案
根据您的评论:
我只需要看看 auth.getUid() 是否存在于“保存”的孩子中。
要检查经过身份验证的用户的 UID 是否存在于“保存”节点中,请使用以下代码行:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("Posts");
Query query = postsRef.orderByChild("saves/" + uid).equalTo(true);
query.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
for (DataSnapshot postSnapshot : task.getResult().getChildren()) {
Post post = postSnapshot.getValue(Post.class);
mySavedPosts.add(post);
}
Collections.reverse(mySavedPosts);
postAdapterSaves.notifyDataSetChanged();
} else {
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
}
}
});
推荐阅读
- python-3.x - numpy:TypeError:^=:'str'和'int'python的不支持的操作数类型
- vba - Office Word vba:如何在合并单元格后插入一列?表格外的一些单元格
- python - 在一列中将列表导出为 CSV
- php - php 如何为 jQuery .get() 或 .post() 请求返回 JSON,解析它并输出到浏览器
- django - 避免双重调用 GET Ajax 加载
- python - python乌龟没有属性去
- javascript - 选择字符串中的值
- xamarin.forms - Xamarin Forms (VS2019) + iOS Intents UI:如何从扩展访问资产 (IntentsUI)
- jquery - 未捕获的 SyntaxError:jQuery 中的意外标记“(”
- python - 如何使用 output.py 以正确的格式查看文本文件?