Firebase-从dataSnapshot检索数据作为LatLng对象

时间:2019-03-03 18:28:14

标签: android firebase firebase-realtime-database kotlin

我具有以下数据库结构:

enter image description here

我想将latitudelongitude检索到LatLng对象中

到目前为止我尝试过的事情:

private fun loadMarkersFromDB(){
    val query = database.getReference("spots/").orderByChild("place/latLng/")
    query.addListenerForSingleValueEvent(object: ValueEventListener{
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if(dataSnapshot.exists()){
                var position: LatLng
                for(spotLatLng:DataSnapshot in dataSnapshot.children){
                    position = spotLatLng.child("place/latLng/").value as LatLng
                    Log.d(TAG, "Database positions: $position")
                }
            }
        }
        override fun onCancelled(p0: DatabaseError) {
        }
    } )
}

但是它不起作用,我得到了错误:

  

java.util.HashMap无法转换为com.google.android.gms.maps.model.LatLng

1 个答案:

答案 0 :(得分:1)

如Doug所指出的那样,您无法将转换快照数据带到所需的任何位置。

因此,我像这样分别抓起latitudelongitude

private fun loadMarkersFromDB(){
    val query = database.getReference("spots/").orderByChild("place/latLng")
    query.addListenerForSingleValueEvent(object: ValueEventListener{
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if(dataSnapshot.exists()){
                var lat: Double
                var lng: Double
                var position: LatLng
                for(spotLatLng:DataSnapshot in dataSnapshot.children){
                    lat = spotLatLng.child("place/latLng/latitude/").value.toString().toDouble()
                    lng = spotLatLng.child("place/latLng/longitude/").value.toString().toDouble()
                    position = LatLng(lat, lng)
                    Log.d(TAG, "Lat: ${position.latitude} Lng: ${position.longitude}")
                }
            }
        }
        override fun onCancelled(p0: DatabaseError) {
        }
    } )
}

如果有更好的方法,请告诉我