Firebase - 使用ref B中的值从ref A获取值的最佳方法?

时间:2017-03-03 22:09:01

标签: java android firebase firebase-realtime-database

有点难以解释,但我会试一试。

基本上我有两个表,一个商店位置,另一个商店用户。流程如下:   - 根据查询获取位置(已完成)   - 获取与查询中的位置匹配的用户

目前,我拥有从位置到用户的所有相应密钥。获取所需位置后获取用户详细信息的正确和最快方法是什么。

我没有询问如何根据位置获取用户,因为我已经为该位置引用了用户,我只是想知道我应该如何执行获取用户详细信息。 我应该为用户创建第二个监听器以获取其详细信息吗?

PS我是firebase的新成员,非常感谢所有帮助!

1 个答案:

答案 0 :(得分:1)

是的,你是对的,这是你可以做到的一种方式:查询可能会像这样

final DatabaseReference root = FirebaseDatabase.getInstance().getReference();
    Query locationQuery = root.child("location").orderByChild("place").equalTo("london");
    locationQuery.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            // I am assuming you have your own custom location class that you push to firebase 
            Location location = dataSnapshot.getValue(Location.class);

            // make the second query inside the on Child Added method

            Query userQuery = root.child("users").orderByChild("location").equalTo(location);

            userQuery.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                    // again I am assuming you have your own custom user class
                    User user = dataSnapshot.getValue(User.class);

                }

        }


}

我刚从子事件侦听器中删除了所有其他方法。 因此,您在位置表上按位置进行第一次查询。然后,对于onChildAdded方法中返回的每个位置,您对users表进行另一个查询,并根据返回的位置进行查询。