重写onDataChange函数时如何在外部范围内进行更改

我正在尝试从Firebase获取数据,对其进行迭代并将其添加到数组中。但我不能通过onDataCreate函数执行此操作,因为它无法正常工作

package com.example.cities

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.activity_show.*

class ShowActivity : AppCompatActivity() {

    private lateinit var db: DatabaseReference
    lateinit var listView: ListView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_show)


        val cities = arrayListOf<String>("Test1")
        db = FirebaseDatabase.getInstance().getReference("Cities")

        db.addValueEventListener(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {
                TODO("not implemented")
            }

            override fun onDataChange(p0: DataSnapshot) {
                    for (i in p0.children) {
                        val city: String = i.value.toString()
                        cities.add(city)
                        println(city)
                    }
            }
        })
        cities.add("Test2")
        listView = findViewById(R.id.listview)
        listView.adapter =
            ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, cities)
    }
}

Test1和Test2正常工作,但主要问题是city.add(city)不起作用,而println(city)起作用。如我所见,它无法进行超出范围的更改,因此我需要帮助。

道格·史蒂文森

addValueEventListener是异步的并立即返回。onDataChange每当查询结果可用时,都会在一段时间后调用。您的代码错误地假设结果立即可用。相反,您应该做的是在知道数据可用之后在回调中填充视图。

    db.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(p0: DataSnapshot) {
            // DATA FIRST BECOMES AVAILABLE HERE
            for (i in p0.children) {
                val city: String = i.value.toString()
                println(city)
                cities.add(city)
            }
            // ONLY POPULATE THE LISTVIEW WHEN THE DATA IS READY
            listView = findViewById(R.id.listview)
            listView.adapter = ArrayAdapter<String>(this@ShowActivity, android.R.layout.simple_expandable_list_item_1, cities)
        }
    })

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS在隔离范围内单击会在外部范围内调用函数

来自分类Dev

在Python中定义函数后,如何在函数范围内更改变量?

来自分类Dev

如何使用Node.js在外部范围内定义回调函数?

来自分类Dev

如何在不连续范围内跳过分组时对记录进行分组?

来自分类Dev

如何在awk的多个范围内对行进行计数?

来自分类Dev

如何在AngularJS隔离范围内进行双向绑定?

来自分类Dev

如何在列范围内对观察结果进行分组?

来自分类Dev

如何在小时范围内对记录进行计数

来自分类Dev

如何在ERB范围内进行迭代?

来自分类Dev

如何在AngularJS隔离范围内进行双向绑定?

来自分类Dev

Firebase,如何在日期范围内对键进行排序

来自分类Dev

如何在命名范围内更改特定值

来自分类Dev

如何在浏览器范围内声明函数?

来自分类Dev

Python:如何在函数的本地范围内运行eval()

来自分类Dev

如何在范围内使用异步函数返回

来自分类Dev

如何在eval()范围内访问javascript函数

来自分类Dev

如何在相同范围内的函数之间传递值

来自分类Dev

如何在外部调用PHP函数

来自分类Dev

如何更改jQuery范围内的填充

来自分类Dev

当文件也已在外部进行编辑时,如何在vim中合并该文件?

来自分类Dev

从外部更改ng-repeat范围内的模型

来自分类Dev

$(this)如何在全球范围内可用

来自分类Dev

如何在范围内添加日期

来自分类Dev

Python Libtcod:如何在变动的移动成本范围内进行寻路?

来自分类Dev

如何在特定时间范围内使用速率限制进行异步API调用?

来自分类Dev

如何在整个工作簿范围内进行Worksheet_SelectionChange?

来自分类Dev

如何在连续的时间戳范围内对数据进行分组

来自分类Dev

如何在范围内对Bash中的整数排序数组进行分组

来自分类Dev

Python Libtcod:如何在变动的移动成本范围内进行寻路?

Related 相关文章

  1. 1

    AngularJS在隔离范围内单击会在外部范围内调用函数

  2. 2

    在Python中定义函数后,如何在函数范围内更改变量?

  3. 3

    如何使用Node.js在外部范围内定义回调函数?

  4. 4

    如何在不连续范围内跳过分组时对记录进行分组?

  5. 5

    如何在awk的多个范围内对行进行计数?

  6. 6

    如何在AngularJS隔离范围内进行双向绑定?

  7. 7

    如何在列范围内对观察结果进行分组?

  8. 8

    如何在小时范围内对记录进行计数

  9. 9

    如何在ERB范围内进行迭代?

  10. 10

    如何在AngularJS隔离范围内进行双向绑定?

  11. 11

    Firebase,如何在日期范围内对键进行排序

  12. 12

    如何在命名范围内更改特定值

  13. 13

    如何在浏览器范围内声明函数?

  14. 14

    Python:如何在函数的本地范围内运行eval()

  15. 15

    如何在范围内使用异步函数返回

  16. 16

    如何在eval()范围内访问javascript函数

  17. 17

    如何在相同范围内的函数之间传递值

  18. 18

    如何在外部调用PHP函数

  19. 19

    如何更改jQuery范围内的填充

  20. 20

    当文件也已在外部进行编辑时,如何在vim中合并该文件?

  21. 21

    从外部更改ng-repeat范围内的模型

  22. 22

    $(this)如何在全球范围内可用

  23. 23

    如何在范围内添加日期

  24. 24

    Python Libtcod:如何在变动的移动成本范围内进行寻路?

  25. 25

    如何在特定时间范围内使用速率限制进行异步API调用?

  26. 26

    如何在整个工作簿范围内进行Worksheet_SelectionChange?

  27. 27

    如何在连续的时间戳范围内对数据进行分组

  28. 28

    如何在范围内对Bash中的整数排序数组进行分组

  29. 29

    Python Libtcod:如何在变动的移动成本范围内进行寻路?

热门标签

归档