Kotlin 为什么';它不允许我在db.collection之外使用这两个变量吗?

Kotlin 为什么';它不允许我在db.collection之外使用这两个变量吗?,kotlin,android-recyclerview,global,Kotlin,Android Recyclerview,Global,它不允许我从db.collection外部读取两个变量“titleNews”和“descriptionNews”,也不允许从db.collection内部将它们添加到RecyclerView中。我可以创建一个可以从外部读取的全局变量吗 private fun postToList(){ val db = FirebaseFirestore.getInstance() for (i:Int in 1..2){ db.

它不允许我从db.collection外部读取两个变量“titleNews”和“descriptionNews”,也不允许从db.collection内部将它们添加到RecyclerView中。我可以创建一个可以从外部读取的全局变量吗

private fun postToList(){
        val db = FirebaseFirestore.getInstance()
        for (i:Int in 1..2){
            
            db.collection("news").document(i.toString()).get().addOnSuccessListener {
                if (it.exists()) {
                    //println("TITLE: ${it.getString("title").toString()}")
                    val titleNews = it.getString("title").toString()
                    val descriptionNews = it.getString("body").toString()
                }
            }
            titlesList.add(titleNews)
            descList.add(descriptionNews)
        }
    }

您在if语句块中声明了它们(在
{
}
之后的
{/code>之间),因此它们是该块的私有对象,并在
}
行立即从内存中清除。局部变量仅在声明它们的
{
}
中可见/可用(即“作用域”到)

无论如何,这是行不通的,因为
onSuccessListener
将在将来某个时候在您放在它下面的代码行之后被调用。您需要将代码放入if语句中的侦听器块中:

private fun postToList(){
    val db = FirebaseFirestore.getInstance()
    for (i:Int in 1..2){
        
        db.collection("news").document(i.toString()).get().addOnSuccessListener {
            if (it.exists()) {
                //println("TITLE: ${it.getString("title").toString()}")
                val titleNews = it.getString("title").toString()
                val descriptionNews = it.getString("body").toString()
                titlesList.add(titleNews)
                descList.add(descriptionNews)
            }
        }
    }
}

如果我把它放在里面,它不会填满回收器视图,我看不到任何代码,你在用回收器视图做任何事情,所以我不能告诉你哪里出了问题。