所以我卡住了。我想从我的 firebase 数据库中检索 child 的 child 。
我的数据库结构是这样的
users{
user1{
name:
regno:
carmodel:
caryear}
user2{
name:
regno:
carmodel:
caryear}
user3{
name:
regno:
carmodel:
caryear}}
Regno = 汽车登记号。
当我输入“carreg no”并按 ok 时。我想要代码搜索每个 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);
}
}
我从另一个 stackflow 得到这个。在此之前,我尝试创建一个 for look。它成功了,但结果有 80% 的时间失败了。 (并不总是正确的)。
最佳答案
要解决这个问题,您需要使用 orderByChild()
方法查询您的数据库,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
Query regnoQuery = usersRef.orderByChild("regno").equalsTo(regno);
其中 equalsTo()
的 regno
参数是您要查找的实际注册号。然后将监听器附加到 regnoQuery
并在 dataSnapshot
对象上使用 getChildrenCount()
方法。如果 child 的数量是 noOfChildrens > 0
则执行您需要的代码集。
关于java - firebase如何获得 child 的 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47296771/