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

标签 android firebase-realtime-database kotlin

我正在努力使用 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/

相关文章:

android - 如何在 flutter 插件中使用接收器(BroadcastReceiver)?

java - Android加密 "pad block corrupted"异常

java - Android TranslateAnimation - 将图像从屏幕右侧移动到屏幕中

javascript - Firebase 函数 promise 未定义的类型错误

ios - 如何在 Firebase 中保存的数据下构建数据

kotlin - 这个通用接口(interface)有什么问题或 Kotlin 编译器无法推断类型吗?

android - 单击对话框中的肯定按钮时如何从头开始播放音频背景?

android - 如何在 Android 中单击微调项时重新创建饼图 (AChartEngine)?

android - Firebase:根据时差允许访问(服务器端时间)

android - 如何对使用上下文的类进行单元测试?