FirebaseDatabase查询:如何根据其他子项的某些值查询某些数据。适用于FirebaseRecyclerAdapter

时间:2018-01-11 08:47:35

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

我正在开发包含片段的应用,此片段使用此查询显示带有关注按钮的新用户:

query = mDatabaseref.child("users").orderByChild("date").limitToLast(10);

点击一个关注按钮后,当前User Uid作为一个孩子保存在另一个名为“Follows”的孩子中,其中包含2个其他孩子的“关注”和“关注者”,如下所示图片:

enter image description here

我想要做的是为名为关注的其他片段制作Query,并向所有当前用户关注的用户显示能够获取他们的名字,我想在dataSnapshot FirebaseRecyclerAdapter方法中根据孩子们的onBindViewHolder制作数据Uid,但我认为这是另一方面,我试图在用户Info child direclty中对下面的内容进行排序,但这会导致RecyclerView上出现奇怪的行为。

1 个答案:

答案 0 :(得分:2)

我不打算给你写所有代码,包括你的FirebaseRecyclerAdapter,我会告诉你如何查询以获得所需的结果。据我了解,这是问题所在。因此,为了实现这一点,您需要查询数据库两次,一次获取所有这些ID,然后根据这些ID获取名称。因此,请使用以下代码:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference followingRef = rootRef.child("follows").child(uid).child("following");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String userId = ds.getKey();

            DatabaseReference userIdRef = rootRef.child("users").child(userId);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
                        String name = dSnapshot.child("name").getValue(String.class);
                        Log.d("TAG", name);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            userIdRef.addListenerForSingleValueEvent(eventListener);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
followingRef.addListenerForSingleValueEvent(valueEventListener);

logcat中的结果将是属于单个用户的所有关注者的名称。