проблемы с currentlocation android googlemaps - PullRequest
2 голосов
/ 02 марта 2020

У меня трудности с тем, чтобы вена взяла текущее местоположение, кто-то может мне помочь, значение вены - это stati c можно определить только, я хотел, чтобы вы взяли текущее местоположение. может кто-нибудь помочь мне, спасибо. любая помощь приветствуется

код утилиты

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)


    }

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Проблема здесь

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 = `...`
    }

}
0 голосов
/ 02 марта 2020

Как насчет инициализации ваших первых классов утилит? так что вы не получите 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)


}
...