java - firebase如何获得 child 的 child ?

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

所以我卡住了。我想从我的 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/

相关文章:

java - 为什么这种形式的 block 同步比其他形式更快?

java - MySQL中如何限制删除特定行

database - 通过 API 或网页公开数据库自动递增的 ID

mysql - SQL:获取在给定日期范围内未登录的用户

ios - 如何使云 Firestore 身份验证 Uid 与用户 ID 匹配?

java - 如何在不丢失 x 和 y 布局坐标的情况下添加缩放功能

java - 比较两个 xml 文件并向第一个 xml 文件添加新标签

php - "SQLSTATE[42000] [1044] Access denied for user ' 团队 '@' 本地主机 ' to database ' 我的数据库 ''

javascript - 在 Promise 之后从 .catch 函数内访问 $scope

java - 如何解决 TabLayout fragment 上的 OnSucceslistener