尝试从Firebase读取数据并将其发布到RecyclerView时,由于异步行为而导致的空列表

我正在尝试从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
        }
    }
}

该列表为空,因为线程正在异步运行。

jjjjcccchhhh 回答:尝试从Firebase读取数据并将其发布到RecyclerView时,由于异步行为而导致的空列表

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3151799.html

大家都在问