我已经用谷歌搜索了 3 个小时,但无法正确表达搜索词,或者没有好的解决方案。我正在为我的 Android 应用程序使用 firebase。它的结构如下: 上面是评论节点
我刚刚使用 ListView 显示了评论。
commentRef1= FirebaseDatabase.getInstance().getReference().child("Comments").child(postKey1);
commentRef1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot ds: dataSnapshot.getChildren()){
comment1=ds.getValue(Comment.class);
arrayList.add(comment1);
}
commentList.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
但与每个关系数据库一样,我试图在注释(表)或节点(而不是整个用户名)中保存 id 或 uid。
但是,现在我在显示来自用户节点的评论(即显示名称)时遇到查询或显示用户名问题,因为 uid 仅保存在评论节点中。
我发现了一些方法,例如嵌套 oneventlistener 等,但对它的复杂性和所需的努力有点困惑。 这将是任何 SQL 语言中的简单查询或嵌套选择。
有人可以帮忙吗?我如何检索该查询中的用户名或特定值。我看到很多人将用户名存储在评论表中。我认为这不是正确的方法。
最佳答案
要获取 full_name,您需要执行以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference();
commentRef1= FirebaseDatabase.getInstance().getReference().child("Comments").child(postKey1);
commentRef1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot ds: dataSnapshot.getChildren()){
String userid=ds.child("uid").getValue().toString();
ref.child("Users").orderByKey().equalTo(userid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String fullname=dataSnapshot.child("full_name").getValue().toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
您可以使用嵌套监听器,我猜您希望用户输入评论,然后单击按钮并使用 uid、post_id、comment 为评论创建一个节点。
然后您想要检索评论以将其与信息一起显示,因此数据快照将位于 Comments/postKey1
上,然后您可以在那里检索信息(包括 uid),然后使用 orderByKey().equalTo(userid)
能够从节点 Users
要避免所有这些,只需在 Comments
节点中添加 fullname
而不是 userid
https://firebase.googleblog.com/2013/04/denormalizing-your-data-is-normal.html
关于java - Firebase:根据另一个节点中的字段从一个节点获取特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774987/