未使用协同程序获取Recyclerview数据

时间:2020-05-05 16:05:19

标签: android firebase kotlin android-recyclerview

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

public virtual ICollection<Address> Address{ get; set; }

当我将delay(1000)放在getImages()的末尾时,数据将正确显示。 请帮助

1 个答案:

答案 0 :(得分:1)

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

示例:

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

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

或者,如果您想使用当前使用的相同架构,则可以使用suspendCoroutine

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

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