如何使用数组从Firebase查询?

时间:2018-07-28 13:24:12

标签: java firebase firebase-realtime-database android-recyclerview

我的目标是从user1, user3, user4之后的user2获得帖子。

 //Get datasnapshot at your "users" root node
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child
            ("Users").child("following").child(uid);

    ref.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    //Get map of users in datasnapshot

                    collectDispayNames((Map<String, Object>) dataSnapshot.getValue());
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    //handle databaseError
                }
            });




private void collectDispayNames(Map<String, Object> users) {

    displayNames = new ArrayList<>();
    //iterate through each following, ignoring their UID
    for (Map.Entry<String, Object> entry : users.entrySet()) {

        //Get user map
        Map singleUser = (Map) entry.getValue();

        //Get following_id field and append to list
        displayNames.add((String) singleUser.get("who_i_follow"));

        //Toast.makeText(this, displayNames.toString(), Toast.LENGTH_LONG).show();

        int size = displayNames.size();
        if (size > 0){

            mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child("Blog")
                    .child("Contents").orderByChild("user_id").equalTo(displayNames.get(1));
        }else {

            mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child("Blog")
                    .child("Contents");
        }
        if (size >1){

            mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child("Blog")
                    .child("Contents").orderByChild("user_id").equalTo(displayNames.get(1));
        }else {
            mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child("Blog")
                    .child("Contents");
        }

    }
}

现在假设我将user2之后的所有用户检索到名为showOwnerId的数组中

我可以得到user2位关注者的数组,但是由于有很多关注者,如何将所有关注的id位用户插入这样的数据库查询中

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Post").child("Blog")
                .child("Contents").orderByChild("user_id").equalTo(displayNames.get(1));

1 个答案:

答案 0 :(得分:2)

无法一次性查询多个值。您将必须为随后的每个用户运行一个单独的查询,并将结果合并到客户端。

由于Firebase可以pipeline these queries over a single connection,因此性能几乎不如某些开发人员想象的那样。