代码之家  ›  专栏  ›  技术社区  ›  fermoga

如何访问OnDataChange完成后返回的值?

  •  1
  • fermoga  · 技术社区  · 8 年前

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

    我已经存储在FireBase数据库A中 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
    

    这个应用程序不仅有我的位置,还有地图上的其他标记。如果我移动所有代码以在方法内部显示我的位置,则在 onMapReady 不会显示。我需要关于如何完成它的建议。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Pavneet_Singh    8 年前

    lateint var myLocMarker:Marker
    

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