我正在尝试从Firebase检索数据并将其显示在带有Kotlin的小型android应用中。
还有一个使用addOnCompleteListener作为Firestore解决方案的线程,但是我找不到用于Firebase参考的addOnCompleteListener。我对Kotlin和Firebase完全陌生,并遵循了一些教程。
这是我用于将数据返回到RecylerAdapter的类。使用静态示例数据,它可以工作,但是当我尝试从Firebase读取数据时,我得到了数据,并且可以在此行中打印完整列表Log.i(“ Listtest”,“ Test $ i:$ {list.get(i ).images}“),但在Log.i(” Listtest“,” title:$ {list.size}}“)行中,列表为空。在Logcat中,我可以看到最后一行在forEach循环之前运行。我不知道如何更改代码以解决异步行为。
该应用程序实际上并不需要EventListener,因为我只想在用户启动该应用程序时从网站加载新闻对象。我们可能每周更改一次数据,所以没有新闻监听器也没关系,但是我从Firebase检索数据的所有教程都告诉我必须使用EventListener
我看过多个教程,分别创建3个片段和一个reclyclerview。该应用程序适用于Android,应显示我从joomla网站推送到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
}
}
}
该列表为空,因为线程正在异步运行。