gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:34:40 26 4
gpt4 key购买 nike

我正在尝试从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。您的代码错误地假设结果立即可用。相反,您应该做的是在知道数据可用之后在回调中填充 View 。

    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)
}
})

关于android - 重写onDataChange函数时如何在外部范围内进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com