我正在尝试从Firebase检索数据并将其显示在带有Kotlin的小型android应用中。
还有另一个使用addOnCompleteListener作为Firestore解决方案的线程,但是我找不到用于Firebase参考的addOnCompleteListener。
这是我用于将数据返回到RecylerAdapter的类。使用静态样本数据,它可以工作,但是当我尝试从Firebase读取数据时,我得到了数据,可以在此行Log.i("Listtest","Test $i: ${list.get(i).images}")
中打印完整列表,但是在行Log.i("Listtest","title: ${list.size}}")
中该列表为空。在Logcat中,我可以看到最后一行在forEach循环之前运行。
我对Kotlin和Firebase完全陌生,并遵循了一些教程。肯定有一些我不知道的重要事情。
class NewsDataSource {
companion object {
fun createDataSet(): ArrayList<NewsItem> {
var database: DatabaseReference
database = FirebaseDatabase.getInstance().reference
val rootRef = database.child("com_content/article")
val list = ArrayList<NewsItem>()
rootRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
var i = 0
override fun onDataChange(snapshot: Datasnapshot) {
val children = snapshot!!.children
children.forEach {
println(it.toString())
Log.i("Test","${it.toString()}")
var newsobject = it.getvalue() as HashMap<*,*>
//var images = newsobject["images"] as HashMap<*,*>
var gson: Gson = Gson()
var newsitemimages = gson.fromJson(
newsobject["images"].toString(),NewsItemImages::class.java
)
var image = "https://########.##/${newsitemimages.image_intro}"
list.add(
NewsItem(
title = newsobject["title"].toString(),introtext = newsobject["title"].toString(),//images = images["image_intro"].toString(),////images = newsobject["images"].toString(),images = image,catid = newsobject["catid"].toString()
)
)
Log.i("Listtest","Test $i: ${list.get(i).images}")
i++
}
}
})
Log.i("Listtest","title: ${list.size}}")
return list
}
}
}