如何返回kotlin中数组中的元素数?

如何返回kotlin中数组中的元素数?,kotlin,arraylist,Kotlin,Arraylist,我试图返回数组列表中的项数,但它不起作用 这是我的代码: override fun getItemCount(): Int { val list = ArrayList<String>() val ref = dbSavedStories.child(currentUid!!) ref.addValueEventListener(object : ValueEventListener { override fun onDataChange(

我试图返回数组列表中的项数,但它不起作用

这是我的代码:

override fun getItemCount(): Int {

    val list = ArrayList<String>()
    val ref = dbSavedStories.child(currentUid!!)

    ref.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            for (childSnapshot in snapshot.children) {
                val key = childSnapshot.key
                list.add(key.toString())
            }

            println(list.count())
        }

        override fun onCancelled(error: DatabaseError) {
            TODO("Not yet implemented")
        }
    })

    return list.count()
}
getItemCount():Int{
val list=ArrayList()
val ref=dbSavedStories.child(currentUid!!)
ref.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(快照:DataSnapshot){
for(snapshot.children中的childSnapshot){
val key=childSnapshot.key
list.add(key.toString())
}
println(list.count())
}
覆盖已取消(错误:DatabaseError){
TODO(“尚未实施”)
}
})
返回列表。计数()
}
在有“println(list.count())”的行上,打印正确的数字,即5

但当我尝试返回数字时,它返回0


如何解决此问题?

您添加了一个侦听器,每当数据发生更改时,它都会打印
list.count()
,但您不会等待数据更改来填充列表。因此,在您返回list.count()时,
onDataChange
函数还没有被调用。我该如何修复它?最好的方法可能是在方法中显式填充list。首先从
ref
获取快照。按照当前的方式,您不能接受接受Int并返回单位的lambda,该单位将在
onDataChange
中调用。或用于从函数返回结果,请注意,这要求函数是可挂起的(如果您无权访问标记函数挂起,因为您似乎要覆盖它,唯一的方法是回调,如第一个选项所述)。我仍然没有设法修复此问题,如果有人能发布一个如何修复它的例子,我将非常感激,因为我正在努力修复它。非常感谢。