Android 在使用Firebase的所有用户的RecyclerVIew中显示好友列表

Android 在使用Firebase的所有用户的RecyclerVIew中显示好友列表,android,kotlin,firebase-realtime-database,android-recyclerview,google-cloud-firestore,Android,Kotlin,Firebase Realtime Database,Android Recyclerview,Google Cloud Firestore,我将所有用户信息与他们的UID一起作为文档存储在firestore中。现在,我在realtimeDatabase中创建了一个节点作为好友,UID作为子节点。现在我只想检索UID出现在Friends节点中但用户未显示在recyclerView中的用户,或者我不知道正确的方法 保存所有用户信息的Firestore 这就是在操作中创建节点好友的方式 FirebaseDatabase.getInstance().reference .child("F

我将所有用户信息与他们的UID一起作为文档存储在firestore中。现在,我在realtimeDatabase中创建了一个节点作为好友,UID作为子节点。现在我只想检索UID出现在Friends节点中但用户未显示在recyclerView中的用户,或者我不知道正确的方法

保存所有用户信息的Firestore

这就是在操作中创建节点好友的方式

 FirebaseDatabase.getInstance().reference
                    .child("Friends")
                    .child(currentUserID)
                    .child(profileId)
                    .setValue("Friend")
                    .addOnSuccessListener{
    FirebaseDatabase.getInstance().reference
                            .child("Friends")
                            .child(profileId)
                            .child(currentUserID)
                            .setValue("Friend")}

这就是我如何根据实时数据库在一个片段中的recyclerView中检索它们

 private fun retrieveFriends()
        {
            val usersRef = FirebaseDatabase.getInstance().reference.child("Friends")
            usersRef.addValueEventListener(object : ValueEventListener
            {
                override fun onDataChange(dataSnapshot: DataSnapshot)
                {
                    mFriend?.clear()
                        for (snapshot in dataSnapshot.children)
                        {
                            val friend = snapshot.getValue(User::class.java)
                            if (friend != null)
                            {
                                mFriend?.add(friend)
                            }
                        friendAdapter?.notifyDataSetChanged()
                    }
                }
            })
        }
在userAdapter中,设置如下值

private fun friendInfo(fullName: TextView, about: TextView, location: TextView, profileImage: CircleImageView) {

val pref = mContext.getSharedPreferences("PREF", Context.MODE_PRIVATE)
        if (pref != null) {
            this.profileId = pref.getString("profileId", "none").toString()
        }
        val userRef = FirebaseFirestore.getInstance().collection("Users").document(profileId)
        userRef.get()
                .addOnSuccessListener { documentSnapshot ->
                    if (documentSnapshot != null && documentSnapshot.exists()) {
                        val user = documentSnapshot.toObject(User::class.java)
                        Picasso.get().load(user!!.getImage()).placeholder(R.drawable.default_pro_pic).into(profileImage)
                        fullName.text = user.getFullName()
                        about.text = user.getAbout()
                        location.text = user.getLocation()
                    }
               }
         }

在从中检索用户时,您必须进行更改,从中检索具有uid的用户,但如果您认为用户的所有信息也将显示,那么这将永远不会发生,因为您刚刚将uid保存为firebase中的值,请尝试以下操作

private fun retrieveFriends()
        {
            val usersRef = FirebaseDatabase.getInstance().reference.child("Friends")
            usersRef.addValueEventListener(object : ValueEventListener
            {
                override fun onDataChange(dataSnapshot: DataSnapshot)
                {
                    mFriend?.clear()
                           val friend = snapshot.getValue(User::class.java)
                            for each{
                            val friendID = it.key
                                mFriend?.add(User(userId = friendID)
                            }
                        friendAdapter?.notifyDataSetChanged()
                    
                }
            })
        }
现在,您只需在您的用户模型类中使用单个userId参数创建另一个构造函数

constructor(userId : String)
{ 
this.userId = userId
}

您可以查看Alex Mamo对“如何将数据从Firebase检索到我的适配器”的回复中的一个相关和详细的示例。没有用处,这是另一个问题。您可以选择从GitHub这样的解决方案中获益,例如。