当前位置的问题 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 类的块将在您创建该类的新实例时调用。但是你的currentLocationcompanion 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 谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章

首次加载android后如何禁用谷歌地图当前位置跟踪

如何在android的谷歌地图上用标记显示我的当前位置

如何在谷歌地图android中显示当前位置的平滑移动

Android 谷歌地图缩放以适​​合标记和当前位置

应用启动时在 android 谷歌地图中获取当前位置(纬度,经度)

打开android原生谷歌地图应用程序获取从当前位置开始的方向