Google Maps API 仅显示一个用户位置,但 Firebase 上保存了多个用户位置(Kotlin android 应用)
Posted
技术标签:
【中文标题】Google Maps API 仅显示一个用户位置,但 Firebase 上保存了多个用户位置(Kotlin android 应用)【英文标题】:Google Maps API only shows one user location, but multiple user locations are saved on Firebase (Kotlin android app) 【发布时间】:2021-08-05 14:12:08 【问题描述】:我创建了一个以 Google Maps API 作为主页的应用,用户可以使用 Realtime Firebase 数据库注册帐户。树将所有用户的位置分别存储在每个 UID 下,如下所示:
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 读取所有经度和纬度,直到全部显示在地图上。
如何让我的应用显示所有位置,以便每个用户都能看到彼此的位置?
【问题讨论】:
你如何读取其他用户位置? 这就是问题所在。它只读取自己的位置,看不到其他用户的位置。 请编辑您的问题并将您的数据库结构添加为 JSON 文件。您可以通过单击 Firebase Console 的溢出菜单 (⠇) 中的导出 JSON 来获取它,或者至少是屏幕截图。 ibb.co/XV7nrmc 【参考方案1】:根据您的数据库schema,获取所有用户的位置,请使用以下代码行:
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
...
现在有了所有用户的坐标,你可以在谷歌地图上添加相应的标记。
【讨论】:
嘿!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!以上是关于Google Maps API 仅显示一个用户位置,但 Firebase 上保存了多个用户位置(Kotlin android 应用)的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps JavaScript API 地理位置标记
如何在注册时使用 google maps api 在全球地图中显示自动注册用户的地理位置?
Apple Maps 和 Google Maps API 的可行性
如何使用来自 Firebase Google Maps API Android 的数据更新标记位置