Google Maps API仅显示一个用户位置,但Firebase(Kotlin android应用程序)上保存了多个用户位置
我创建了一个以谷歌地图API为主页的应用程序,用户可以使用实时Firebase数据库注册帐户。该树在每个UID下分别存储所有用户的位置,如下所示:Google Maps API仅显示一个用户位置,但Firebase(Kotlin android应用程序)上保存了多个用户位置,android,firebase,google-maps,kotlin,firebase-realtime-database,Android,Firebase,Google Maps,Kotlin,Firebase Realtime Database,我创建了一个以谷歌地图API为主页的应用程序,用户可以使用实时Firebase数据库注册帐户。该树在每个UID下分别存储所有用户的位置,如下所示: Firebase-root | --- users | --- $uid | --- profileImageUrl: "https://..." | --- uid: "h9xZs...b
Firebase-root
|
--- users
|
--- $uid
|
--- profileImageUrl: "https://..."
|
--- uid: "h9xZs...bV82"
|
--- username: "My name"
|
--- location
|
--- latitude: 53.37...
|
--- longitude: -0.90...
这是针对此问题的代码当前的外观:
private fun getLocationUpdates() {
locationRequest = LocationRequest()
locationRequest.interval = 30000
locationRequest.fastestInterval = 20000
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
if (locationResult.locations.isNotEmpty()) {
val location = locationResult.lastLocation
//save each user`s location to firebase database
val user = FirebaseAuth.getInstance().getCurrentUser();
val databaseRef: DatabaseReference = Firebase.database.reference
val locationlogging = LocationLogging(location.latitude, location.longitude)
databaseRef.child("users").child(user!!.getUid()).child("userlocation").setValue(locationlogging)
.addOnSuccessListener {
Toast.makeText(applicationContext, "Locations written into the database", Toast.LENGTH_LONG).show()
}
.addOnFailureListener {
Toast.makeText(applicationContext, "Error occured while writing your location to the database", Toast.LENGTH_LONG).show()
}
//show marker on map
val latLng = LatLng(location.latitude, location.longitude)
val markerOptions = MarkerOptions().position(latLng)
map.addMarker(markerOptions)
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10f))
}
}
}
}
如果我登录,我只能看到一个位置,那就是我自己的设备位置。但是,如果我同时使用其他设备登录,则标记不会显示
有人建议我把我的代码放入一个for-each循环中,这样它就能从Firebase读取所有的经纬度,直到所有的经纬度都出现在地图上
如何使我的应用程序显示所有位置,以便每个用户都能看到彼此的位置?根据您的数据库,要获取所有用户的位置,请使用以下代码行:
val rootRef = FirebaseDatabase.getInstance().reference
val usersRef = rootRef.child("users")
usersRef.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
for (userSnapshot in task.result!!.children) {
val lat = userSnapshot.child("userlocation/latitude").getValue(Double::class.java)!!
val lng = userSnapshot.child("userlocation/longitude").getValue(Double::class.java)!!
Log.d(TAG, "$lat, $lng")
}
} else {
Log.d(TAG, task.exception!!.message!!) //Don't ignore potential errors!
}
}
logcat中的结果将是:
53.82809, -1.6617683
...
现在有了所有用户的坐标,您可以在谷歌地图上添加相应的标记。如何读取其他用户位置?这就是问题所在。它只读取自己的位置,而看不到其他用户位置。请编辑您的问题并将您的数据库结构添加为JSON文件。您只需单击溢出菜单中的导出JSON即可获得它(⠇) 在你的,或者至少是截图。嘿!我能帮你提供其他信息吗?如果你认为我的答案对你有帮助,请考虑通过点击复选来接受它。✔️) 在投票箭头下方的左侧。应该将颜色更改为绿色。我非常感谢。谢谢!