所以我被困住了。我想从我的firebase数据库中检索孩子的孩子。
我的数据库结构看起来像这样
users{
user1{
name:
regno:
carmodel:
caryear}
user2{
name:
regno:
carmodel:
caryear}
user3{
name:
regno:
carmodel:
caryear}}
Regno =汽车注册号。
当我键入“carreg no”并按“确定”时。我想要代码搜索每个carreg。如果找到匹配则执行下一组代码。
到目前为止,我已尝试将其存储在数组中。但是当我把reg或任何变量名称存在时,代码似乎失败了。
public void input(){
FirebaseDatabase firebase = FirebaseDatabase.getInstance();
final DatabaseReference table_user = firebase.getReference("User");
table_user.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Get map of users in datasnapshot
collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
//handle databaseError
}
});
private void collectPhoneNumbers(Map<String,Object> users) {
ArrayList<Long> phoneNumbers = new ArrayList<>();
//iterate through each user, ignoring their UID
for (Map.Entry<String, Object> entry : users.entrySet()){
//Get user map
Map singleUser = (Map) entry.getValue();
//Get phone field and append to list
phoneNumbers.add((Long) singleUser.get("namesd"));
}
System.out.println(phoneNumbers.toString());
mVoiceInputTv.setText("" + phoneNumbers);
}
}
我从另一个堆栈流程中得到了这个。在此之前,我尝试创建一个外观。这是成功的,但结果80%的时间都失败了。 (并不总是正确的)。
答案 0 :(得分:2)
要解决此问题,您需要使用orderByChild()
方法查询数据库,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
Query regnoQuery = usersRef.orderByChild("regno").equalsTo(regno);
来自regno
的{{1}}参数是您要查找的实际注册号。然后将监听器附加到equalsTo()
并在regnoQuery
对象上使用getChildrenCount()
方法。如果孩子的数量为 dataSnapshot
,则执行您需要的一组代码。
答案 1 :(得分:0)
private FirebaseDatabase mdatabase;
private DatabaseReference mdatabaseRef;
mdatabase = FirebaseDatabase.getInstance();
mdatabaseRef = mdatabase.getReference();
mdatabaseRef.child("users").child("users1").orderByChild("regno").equalsTo(regno).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
}
}