gpt4 book ai didi

android - 如何访问 onDataChange 完成后返回的值?

转载 作者:行者123 更新时间:2023-11-29 23:47:11 25 4
gpt4 key购买 nike

我正在努力使用 onDataChange 访问从数据库返回的信息。我知道这是由于其异步性质,但我需要将这些值存储在某处以便在代码完成后访问。

我在 Firebase 数据库中存储了一个 user 子级,它存储了 latlng 位置。然后我的代码按如下方式检索它:

override fun onDataChange(dataSnapshot: DataSnapshot) {
var user: User?

dataSnapshot.children.forEach {
user = it.getValue(User::class.java)
Log.d("Maps::user::lat", user?.lat.toString()) // Has info
Log.d("Maps::user::lng", user?.lng.toString()) // Has info
mMyLocation.latitude = user!!.lat!!
mMyLocation.longitude = user!!.lng!!
}
}

val location = LatLng(mMyLocation.latitude, mMyLocation.longitude) // 0.0 and 0.0

该应用不仅包含我的位置,还包含 map 上的其他标记。如果我将所有用于显示我的位置的代码移动到方法内部,则将不会显示在 onMapReady 中设置的其他标记。我需要关于如何完成它的建议。

最佳答案

首先简单声明一个gloabl(witin类)标记引用

lateint var myLocMarker:Marker

然后在谷歌地图中添加您的位置标记(onmapready 等)

var a = MarkerOptions()
.position(LatLng(50,6))) // any position, which you already have, i suppose
myLocMarker = map.addMarker(a)

然后在 onDataChange 中将标记位置更新为

override fun onDataChange(dataSnapshot: DataSnapshot) {
var user: User?

dataSnapshot.children.forEach {
user = it.getValue(User::class.java)
Log.d("Maps::user::lat", user?.lat.toString()) // Has info
Log.d("Maps::user::lng", user?.lng.toString()) // Has info
mMyLocation.latitude = user!!.lat!!
mMyLocation.longitude = user!!.lng!!
myLocMarker.setPosition(LatLong(user!!.lat!!,user!!.lng!!))
}
}

关于android - 如何访问 onDataChange 完成后返回的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51226114/

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