【发布时间】:2018-12-05 04:18:29
【问题描述】:
我已成功从Firebase 读取数据,并使用完成回调将其异步显示在imageView 中。作为编程新手,我仍然很难理解回调的一些机制,希望有人能对我的一些问题有所了解。我已经阅读并观看了多个教程和解释,但仍然难以理解一些概念。这是我的Firebase 代码:
第 1 部分:
readFirebaseData(object: FirebaseCallback{
override fun onCallback(list: MutableList<RecipeTemplate>) {
glideVariable?.loadImageUrl(recipeArray[1].recipeImage) //WORKS!!
}
})
第 2 部分:
fun readFirebaseData(firebaseCallback: FirebaseCallback) {
ref!!.addValueEventListener(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot?) {
for (item in snapshot!!.children) {
var tempRecipe = RecipeTemplate()
val image = item.child("recipeImageFirebase")
tempRecipe.recipeImage = image.value.toString()
recipeArray.add(tempRecipe)
}
//INSERTING CODE HERE AT LATER STAGE... SEE LATER IN POST
firebaseCallback.onCallback(recipeArray)
}//END ON DATA CHANGE METHOD
}) //END FB
}//END READ DATA
第三部分:
interface FirebaseCallback {
fun onCallback(list: MutableList<RecipeTemplate>)
}
主要是我不明白界面的重点,以及整个覆盖功能部分(第 1 部分)。问题是,我成功地做了同样的事情,只是在Firebase 代码的末尾使用了一个函数调用。它需要更少的代码,更容易理解和理解,据我所知,它做同样的事情。它看起来像这样:
第 2 部分内部:
test(recipeArray) //SIMPLY CALLING A FUNCTION INSTEAD OF THE CODE PREVIOUSLY USED.
//firebaseCallback.onCallback(recipeArray)
然后是测试函数本身:
fun test(list: MutableList<RecipeTemplate>) {
Log.d("TAGM", "DONE WITH FB")
glideVariable?.loadImageUrl(recipeArray[3].recipeImage)
}
那么,我在这里缺少什么?为什么要用整个接口回调的东西?
【问题讨论】:
标签: android firebase firebase-realtime-database kotlin