Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google Maps API仅显示一个用户位置,但Firebase(Kotlin android应用程序)上保存了多个用户位置_Android_Firebase_Google Maps_Kotlin_Firebase Realtime Database - Fatal编程技术网

Google Maps API仅显示一个用户位置,但Firebase(Kotlin android应用程序)上保存了多个用户位置

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

我创建了一个以谷歌地图API为主页的应用程序,用户可以使用实时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读取所有的经纬度,直到所有的经纬度都出现在地图上


如何使我的应用程序显示所有位置,以便每个用户都能看到彼此的位置?

根据您的数据库,要获取所有用户的位置,请使用以下代码行:

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即可获得它(⠇) 在你的,或者至少是截图。嘿!我能帮你提供其他信息吗?如果你认为我的答案对你有帮助,请考虑通过点击复选来接受它。✔️) 在投票箭头下方的左侧。应该将颜色更改为绿色。我非常感谢。谢谢!