我正在开发包含片段的应用,此片段使用此查询显示带有关注按钮的新用户:
query = mDatabaseref.child("users").orderByChild("date").limitToLast(10);
点击一个关注按钮后,当前User Uid
作为一个孩子保存在另一个名为“Follows”的孩子中,其中包含2个其他孩子的“关注”和“关注者”,如下所示图片:
我想要做的是为名为关注的其他片段制作Query
,并向所有当前用户关注的用户显示能够获取他们的名字,我想在dataSnapshot
FirebaseRecyclerAdapter
方法中根据孩子们的onBindViewHolder
制作数据Uid
,但我认为这是另一方面,我试图在用户Info child direclty中对下面的内容进行排序,但这会导致RecyclerView
上出现奇怪的行为。
答案 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中的结果将是属于单个用户的所有关注者的名称。