Android 未使用协程获取Recyclerview数据

Android 未使用协程获取Recyclerview数据,android,firebase,kotlin,android-recyclerview,Android,Firebase,Kotlin,Android Recyclerview,我正在尝试使用协同程序向recyclerview显示Firebase存储数据。当我这样做时,它不显示图像,而是显示空的recyclerview。 这是密码 private var imageList = ArrayList<ImageItem>() onCreate() { .... CoroutineScope(Dispatchers.Main).launch { getImages() updateAdapter() }

我正在尝试使用协同程序向recyclerview显示Firebase存储数据。当我这样做时,它不显示图像,而是显示空的recyclerview。 这是密码

private var imageList = ArrayList<ImageItem>()

onCreate() {
    ....
    CoroutineScope(Dispatchers.Main).launch {
        getImages()
        updateAdapter()
    }

}

private suspend fun getImages() =
    withContext(Dispatchers.IO) {
        storageReference.listAll().addOnSuccessListener { listResult ->
            listResult.items.forEach { storageRef ->
                storageRef.downloadUrl.addOnSuccessListener {
                    imageList.add(ImageItem(it))
                }
            }
        }
}

private suspend fun updateAdapter() {
    withContext(Dispatchers.Main) {
        adapter.notifyDataSetChanged()
    }
}
private var imageList=ArrayList()
onCreate(){
....
协同路由示波器(Dispatchers.Main)。启动{
getImages()
updateAdapter()
}
}
私有图像()=
withContext(Dispatchers.IO){
storageReference.listAll().addOnSuccessListener{listResult->
listResult.items.forEach{storageRef->
storageRef.downloadUrl.addOnSuccessListener{
imageList.add(ImageItem(it))
}
}
}
}
private suspend fun updateAdapter(){
withContext(Dispatchers.Main){
adapter.notifyDataSetChanged()
}
}
当我在getImages()的末尾添加延迟(1000)时,数据将正确显示。
请帮助

addOnSuccessListener
不会在分配的同时被调用,协同程序将在完成之前退出。您可以在forEach循环之后调用
updatedapter

示例:

//onCreate
协同路由示波器(Dispatchers.Main)。启动{
getImages()
}
私有图像()=
withContext(Dispatchers.IO){
storageReference.listAll().addOnSuccessListener{listResult->
listResult.items.forEach{storageRef->
storageRef.downloadUrl.addOnSuccessListener{
imageList.add(ImageItem(it))
}
}
updateAdapter()
}
}
或者,如果您喜欢使用当前使用的相同体系结构,您也可以使用

//onCreate
协同路由示波器(Dispatchers.Main)。启动{
getImages()
updateAdapter()
}
私有图像()=
withContext(Dispatchers.IO){
suspendCoroutine{cont->
storageReference.listAll().addOnSuccessListener{listResult->
listResult.items.forEach{storageRef->
storageRef.downloadUrl.addOnSuccessListener{
imageList.add(ImageItem(it))
}
}
续简历(单位)
}
}
}

addOnSuccessListener
不会同时运行,协同程序将在完成之前退出。您可以在forEach循环之后调用
updatedapter
。如果您不想将updatedapter放入回调中,请告诉我
storageReference.listAll()的类型,以进一步帮助您。