CABARAN
是未知的Uid。它不是文本。现在,我有了uid,并且想要获得tajukPenuh
的价值。
这是代码,我仍然无法获取值。
FirebaseDatabase.getInstance().getReference().child("karangan").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
Karangan karangan = child.child(karanganID).getValue(Karangan.class);
if (karangan != null) {
String tajukPenuh = karangan.getTajukPenuh();
holder.getTextViewKaranganID().setText("Karangan Tajuk: " + tajukPenuh);
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 0 :(得分:2)
理论上,您可以执行以下查询:
srcip=<ipv4>
但是问题是您的规则中需要大量索引,这在技术上可能是可行的,但对于大多数实际用法而言是不可行的。
您当前的数据结构使查找FirebaseDatabase.getInstance().getReference().child("karangan")
.orderByChild("-LYgFIl4Xiv_Ls51Slvh/uid").equalTo("-LYgFIl4Xiv_Ls51Slvh")
.addListenerForSingleValueEvent(new ValueEventListener() {
的所有子节点变得容易,但是对于给定的子节点却不容易找到CABARAN
。为了使用例有效运行,您应该使用所谓的反向索引扩展数据结构,该反向索引将从您知道的值映射回CABARAN
。像这样:
CABARAN
这是一个附加的数据结构,在写入其余数据时必须保持最新状态。但是通过这种结构,现在很容易确定"myIndex": {
"-LYgFIl4Xiv_Ls51Slvh": "CABARAN",
"-LzfFIl4Xasas51Slads": "CABARAN",
"-Lasddas981398asdh1h": "CASITWO"
}
映射到-LYgFIl4Xiv_Ls51Slvh
。
有关此的更多信息,请在这里查看我的答案:Firebase query if child of child contains a value