Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 基于MessageList的订购用户列表-Kotlin&;安卓_Android_Sorting_Kotlin_Firebase Realtime Database - Fatal编程技术网

Android 基于MessageList的订购用户列表-Kotlin&;安卓

Android 基于MessageList的订购用户列表-Kotlin&;安卓,android,sorting,kotlin,firebase-realtime-database,Android,Sorting,Kotlin,Firebase Realtime Database,我试图按照用户ID在MessageList数组中的显示顺序对用户对象列表进行排序。MessageList由用户聊天对象的ID组成(按时间排序-使用sortwith),然后以与消息列表相同的顺序将其作为用户列表发送到用户适配器。这样可以显示用户名、配置文件图像和其他详细信息。。。我从firebase了解到一个用户的datasnapshot按原样提供订单,因此需要再次订购 我尝试根据MessageList对用户数组列表进行排序,但它在id访问(要求我将其公开)方面存在问题,并且最终输出不再是用户列表

我试图按照用户ID在MessageList数组中的显示顺序对用户对象列表进行排序。MessageList由用户聊天对象的ID组成(按时间排序-使用sortwith),然后以与消息列表相同的顺序将其作为用户列表发送到用户适配器。这样可以显示用户名、配置文件图像和其他详细信息。。。我从firebase了解到一个用户的datasnapshot按原样提供订单,因此需要再次订购

我尝试根据MessageList对用户数组列表进行排序,但它在id访问(要求我将其公开)方面存在问题,并且最终输出不再是用户列表。您将如何继续展示按时间戳排序的消息列表

用户数据类

class Users {
private var uid: String = ""}
class MessageList {
private var id: String = ""
private var chattimeStmp: Long = 0}
消息列表数据类

class Users {
private var uid: String = ""}
class MessageList {
private var id: String = ""
private var chattimeStmp: Long = 0}
基于消息列表创建用户列表的函数

private var userMsgAdapter: UserMsgAdapter? = null
private var mUsers: List<Users>? = null
private var usersMsgList: List<MessageList>? = null
private var firebaseUser : FirebaseUser? = null
lateinit var recycler_view_msgList : RecyclerView

private fun retrieveMessageList()
    {
        mUsers = ArrayList()
        val ref = FirebaseDatabase.getInstance().reference.child("Users")
        ref.addValueEventListener(object : ValueEventListener {

            override fun onDataChange(p0: DataSnapshot) {
                (mUsers as ArrayList).clear()

                //sorting MessageList based on timestamp
                usersMsgList?.sortedBy { it.getChattimeStmp() }

                for (dataSnapshot in p0.children) {
                    val user = dataSnapshot.getValue(Users::class.java)
                    for (eachMessageList in usersMsgList!!) {
                        if (eachMessageList.getId()
                                .equals(user!!.getUID()) && !firebaseUser?.uid.equals(
                                eachMessageList.getId()
                            )
                        ) {
                            (mUsers as ArrayList).add(user)
                        }
                    }
                }

                //Creating a map and sorting list based on the other
                val orderById = usersMsgList!!.withIndex().associate { it.value to it.index }
                val mSortedUsers = (mUsers as ArrayList<Users>).sortedBy { orderById[it.getUID()] }

                userMsgAdapter = UserMsgAdapter(context!!, mUsers as ArrayList<Users>, true)
                userMsgAdapter!!.notifyDataSetChanged()
                recycler_view_msgList.adapter = userMsgAdapter
            }

            override fun onCancelled(p0: DatabaseError) {
            }
        }
        )
    }
private var userMsgAdapter:userMsgAdapter?=无效的
私人var缪斯:列表?=无效的
私有var用户SMSGLIST:列表?=无效的
私有var firebaseUser:firebaseUser?=无效的
lateinit var回收器\u视图\u msgList:RecyclerView
private fun retrieveMessageList()
{
mUsers=ArrayList()
val ref=FirebaseDatabase.getInstance().reference.child(“用户”)
ref.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(p0:DataSnapshot){
(mUsers作为ArrayList).clear()
//基于时间戳的消息列表排序
usersMsgList?.sortedBy{it.getChattimeStmp()}
对于(p0.儿童中的数据快照){
val user=dataSnapshot.getValue(Users::class.java)
for(用户列表中的每个消息传递者!!){
if(eachMessageList.getId()
.equals(user!!.getUID())和&!firebaseUser?.uid.equals(
eachMessageList.getId()
)
) {
(mUsers作为ArrayList)。添加(用户)
}
}
}
//基于另一个创建地图和排序列表
val orderById=usersMsgList!!.withIndex().associate{it.value to it.index}
val mSortedUsers=(mUsers作为ArrayList).sortedBy{orderById[it.getUID()]}
userMsgAdapter=userMsgAdapter(context!!,mUsers作为ArrayList,true)
userMsgAdapter!!.notifyDataSetChanged()
回收器\u视图\u msgList.adapter=userMsgAdapter
}
已取消覆盖乐趣(p0:DatabaseError){
}
}
)
}

在这种情况下,最好的解决方案是不要根据用户对象在Messagelist中的显示顺序对其进行排序,而是直接调用Messagelist中每个对象的recycler视图,并在适配器中获取用户详细信息