当前位置的问题 android 谷歌地图
Posted
技术标签:
【中文标题】当前位置的问题 android 谷歌地图【英文标题】:problems with currentlocation android googlemaps 【发布时间】:2020-06-14 07:00:28 【问题描述】:vienna 取当前位置有困难,谁能指导我,vienna 的值是静态的只能定义,我想让你取当前位置。有人可以帮助我吗,谢谢。欢迎任何帮助
实用程序代码
import map.me.models.Issue
import com.google.android.gms.maps.model.LatLng
class Utils (location: LatLng)
companion object
lateinit var currentLocation: LatLng
var vienna= LatLng(-23.5629, -46.6544)
var markers = ArrayList<Issue>()
init
vienna = LatLng(-23.5629, -46.6544)
currentLocation = location
markers = ArrayList()
代码mapfrag
override fun onMapReady(googleMap: GoogleMap)
Log.i("MAP READY", "READY")
val position = if (currentLocation != null) LatLng(currentLocation!!.latitude, currentLocation!!.longitude) else Utils.vienna
this.map = googleMap
this.map!!.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15f)) // Vienna
getFineLocationPermission()
this.map!!.setOnMarkerClickListener(this)
this.map!!.uiSettings.isRotateGesturesEnabled = true
this.map!!.uiSettings.isZoomGesturesEnabled = true
this.map!!.setOnInfoWindowClickListener(this)
this.map!!.setOnMapLongClickListener(this)
【问题讨论】:
您如何请求位置? 您好,感谢您的回复。通过单击地图手动创建标记时很好,他可以获得当前位置,但是当他单击快速拨号按钮时,他会得到 utils.vienna,我需要修改 utils.vienna 以使用 currentlocation 问题在所有方面我试过犯错误发生。 因为你有currentLocation
变量,当你点击地图上的新位置时,你需要修改它的值。 [所以当用户点击不是来自 GPS 的某个位置时,您会在地图中获得位置?]
val position = if (currentLocation != null) LatLng(currentLocation!!.latitude, currentLocation!!.longitude) else Utils.currentLocation 给出这个错误 kotlin.UninitializedPropertyAccessException: lateinit property currentLocation has not been initialized
我正在更新帖子以获取更多信息
【参考方案1】:
问题来了
kotlin.UninitializedPropertyAccessException: lateinit property currentLocation has not been initialized
发生这种情况是因为您的 lateinit var currentLocation: LatLng
从未在 init
块中初始化。 init
类的块将在您创建该类的新实例时调用。但是你的currentLocation
是companion object
中的一个变量,所以当你这样调用它时,你的类永远不会被创建一个对象,currentLocation
永远不会被初始化。
您可以通过使用对象而不是类来解决此问题。
object Utils
lateinit var currentLocation: LatLng
init
currentLocation = `...`
【讨论】:
【参考方案2】:你的 utils 类的初始化怎么样?
所以你不会得到error kotlin.UninitializedPropertyAccessException: lateinit property currentLocation
class Utils ()
companion object
lateinit var currentLocation: LatLng
var vienna= LatLng(-23.5629, -46.6544)
var markers = ArrayList<Issue>()
fun initMyCurrentLocation(loc:LatLang?)
currentLocation = loc?: vienna
在你的片段中,你可以像这样使用这个方法:
override fun onMapReady(googleMap: GoogleMap)
//init you currentLocationHere
Utils.initMyCurrentLocation('yourCurrentLocation')
//the rest code.
val position = if (currentLocation != null) LatLng(currentLocation!!.latitude, currentLocation!!.longitude) else Utils.vienna
this.map = googleMap
this.map!!.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15f)) // Vienna
getFineLocationPermission()
this.map!!.setOnMarkerClickListener(this)
this.map!!.uiSettings.isRotateGesturesEnabled = true
this.map!!.uiSettings.isZoomGesturesEnabled = true
this.map!!.setOnInfoWindowClickListener(this)
this.map!!.setOnMapLongClickListener(this)
【讨论】:
你能指导我如何启动 utils 吗?我会很感激。寻求帮助。我是新人 你可以这样尝试。如果你想使用代码。我建议你了解 Singleton。 分类器 'LatLng' 没有伴随对象,因此必须在 utils 中在这里初始化 嗨,是的,我的代码出错了。 val position: LatLng = if (currentLocation != null) LatLng(currentLocation!!.latitude, currentLocation!!.longitude) else Utils.initMyCurrentLocation( loc = LatLng?) 分类器 'LatLng' 没有伴随对象,因此必须在这里初始化以上是关于当前位置的问题 android 谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章