Я пытаюсь получить данные (широту и долготу) из Firebase и разместить их в качестве маркеров для заполнения моей карты Google.Я использую Kotlin.
jsonFirebaseData
Я пробовал официальную документацию Firebase для чтения данных, а также пробовал:
http://myfirebasemaps.ga/
Также пробовал:
Получить местоположение из Firebase и поставить маркер на API Google Map API для приложения Android
private lateinit var mCompanies: DatabaseReference
вСоздать раздел:
mCompanies = FirebaseDatabase.getInstance().reference
раздел onMapReady:
fun loadMarkersFromDB() {
mCompanies = FirebaseDatabase.getInstance().getReference().child("results")
mCompanies.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (s in dataSnapshot.children) {
var company = dataSnapshot.getValue(Company::class.java)
var location = LatLng(company!!.latitude, company.longitude!!)
mMap.addMarker(MarkerOptions().position(location).title(company!!.name).snippet(company!!.city))
.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.w("MapsActivity", databaseError.toException())
}
})
}
Также у меня есть класс данных:
data class Company(
var city: String,
var latitude: Double,
var longitude: Double,
var name: String
) {
constructor() : this("", 0.0, 0.0, "")
}
Ничего не происходит.Приложение не падает, но маркеры не добавляются из моей базы.
РЕДАКТИРОВАТЬ
Я создал приватную функцию:
private fun loadMarkersFromDB() {
mCompanies = FirebaseDatabase.getInstance().reference
mCompanies.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
if (dataSnapshot.exists()) {
for (s in dataSnapshot.children) {
var company = dataSnapshot.getValue(Company::class.java)
var location = LatLng(company!!.latitude, company.longitude!!)
mMap.addMarker(MarkerOptions().position(location).title(company!!.name).snippet(company!!.city))
.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))
Log.d("onDataChange", company.toString())
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.w("MapsActivity", databaseError.toException())
}
})
}
Тогда явызовите функцию в onMapReady после того, как карта будет создана.
Log.d("onDataChange", company.toString())
отображает это в Logcat:
D/onDataChange: Company(city=, latitude=0.0, longitude=0.0, name=)
Когда я изменяю ее на company !!. city ничего не появляется.