![](/img/trans.png)
[英]Save User to Firebase Database in Kotlin | Android Studio
[英]Firebase Database Query in Android Studio
我想在 Firebase 数据库中进行查询:如果在“检测名称”节点中输入数据,则它会在“受过培训的人员姓名”节点中查询相同的数据,如果两者相等,则它会获取所有同名的子节点,但不是全部值。
如果检测名称节点中的孩子是 maarij,则在受过训练的人名中搜索 maarij 并仅获取 maarij 的所有信息。
数据库:
我尝试使用此代码进行查询,但它提供了保存在 Trained Person Names 节点中的所有数据。 如果在“Trained Person Names”节点中找到“detection name”子节点,我只需要该名称的特定数据和信息。
final Query mydata= FirebaseDatabase.getInstance().getReference().child("Trained Person Names");
mydata.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final Query myquery = detection_Name.orderByChild("Detection name").limitToLast(1)
.equalTo(String.valueOf(trained_Name.orderByChild("Guest Name")));
Log.i("33","VALUE OF DATASNAPSHOT:"+dataSnapshot.getValue());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
谢谢!!
你做错了兄弟因为名字不是唯一的词,只使用不会在任何地方重复的唯一参数。 然后你就可以正确地完成你的任务了。 创建一个唯一的 ID 并将该值保存在“检测名称”表中。 使用该值作为“受过培训的人员姓名”表中的键。 现在,您必须先做一件事,从“检测名称”表中获取该值并使用,如下所示:
final Query mydata= FirebaseDatabase.getInstance().getReference().child("Trained Person Names");
mydata.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final Query myquery = detection_Name.orderByChild("Detection name").limitToLast(1)
.equalTo(String.valueOf(trained_Name.orderByChild("Guest Name")));
Log.i("33","VALUE OF DATASNAPSHOT:"+dataSnapshot.getValue());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
您可以像这样创建一个唯一值:
String uniqueId = FirebaseDatabase.getInstance().getReference().push().toString();
我解决了我的问题。 我在我的代码中获取了节点检测名称节点,而不是将此名称发送给受过训练的人名称节点,并且只获取特定人员的信息而不是所有人的信息。
trained_Name.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String detected_name = String.valueOf(dataSnapshot.child(detect_Name.toLowerCase()).getValue());
Log.i("data","Detected Person Info Only:"+" "+ detected_name);
String formattedData=formatString( detected_name);
tv1.setText(formattedData);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我通过以下代码检索了检测到的人节点的姓氏:
detection_Name.addChildEventListener(new ChildEventListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
String last_name = String.valueOf(dataSnapshot.getValue());
detect_Name= last_name;
Log.i("Retrieve name only:", String.valueOf(dataSnapshot.getValue()));
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.