我正在努力使用 onDataChange
访问从数据库返回的信息。我知道这是由于其异步性质,但我需要将这些值存储在某处以便在代码完成后访问。
我在 Firebase 数据库中存储了一个 user
子级,它存储了 lat
和 lng
位置。然后我的代码按如下方式检索它:
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/