firebase如何让孩子的孩子?

时间:2017-11-14 23:09:07

标签: java database firebase firebase-realtime-database child-process

所以我被困住了。我想从我的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%的时间都失败了。 (并不总是正确的)。

2 个答案:

答案 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()) {


}
}