【发布时间】:2018-03-23 01:38:47
【问题描述】:
我创建了一个调用 FireBase 数据库并返回 MutableList 的函数。但是,当我尝试让它在特定行返回时,它说它需要一个 Unit 而不是 MutableList。
fun firebaseCollect(key: String): MutableList<CustomList> {
var ref = FirebaseDatabase.getInstance().getReference(key)
var lessonList = mutableListOf<CustomList>()
ref.addValueEventListener(object: ValueEventListener{
override fun onCancelled(p0: DatabaseError?) {
}
override fun onDataChange(p0: DataSnapshot?) {
if (p0!!.exists()) {
lessonList.clear()
for (index in p0.children) {
val lesson = index.getValue(CustomList::class.java)
lessonList.add(lesson!!)
}
return lessonList
}
}
})
return lessonList
}
Type mismatch. Required: Unit, Found: MutableList< CustomList > 在第一个返回的课程列表中找到,因为我要求它返回 是一个 MutableList 而不是一个单元。我很困惑为什么会发生这种情况。最后一次返回将给出一个空列表。目前这是我在 FireBase 的第一次尝试,这是我正在做的练习。读写规则也已设置为公开。我应该如何重新编码能够将数据从 FireBase 返回到函数并传递回调用者的函数?
【问题讨论】:
-
那些是异步函数,所以当你“想要”的时候你不能从它们返回。当您的数据准备就绪时(首先是
return lessonList),您可以对列表做任何您想做的事情(调用另一个函数,...)。 -
当您调用
firebaseCollect(key)时,您的函数正在向 Firebase 数据库发送请求并立即返回,即您的请求是异步处理的。这就是为什么你有回调函数(onDataChanged,onCanceled,...),这样当事情发生或完成时你可以得到通知。 -
@StefanGolubović 这些 cmets 听起来像是一个很好的答案的开始! ;-)
-
@FrankvanPuffelen 好吧,我想我应该发布答案,但我的想法是快速提示为什么它不像Blender 认为的那样工作。同时Doug Stevenson给出了很好的答案。 :)
标签: firebase firebase-realtime-database kotlin