Свойство lateinit mMap не было инициализировано - PullRequest
0 голосов
/ 13 декабря 2018

Я написал эти строки кода и получил ошибку

Вызвано: kotlin.UninitializedPropertyAccessException: свойство lateinit mMap не было инициализировано

Мой метод:

fun initCameraIdleListener() {
    var latitude = mMap.cameraPosition.target.latitude
    var longitude = mMap.cameraPosition.target.longitude
    myLatLng = LatLng(latitude, longitude)

    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLatLng, 18f))

}

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Эта ошибка возникает, когда вы объявляете свойство как lateinit и не инициализируете его перед использованием.

class YourClass {

    // You're declaring you'll assign a value for this field later in the code
    lateinit var someObject : SomeType

    fun doSomething(){
        someObject.method() // Boom ! UninitializedPropertyAccessException
    }
}

class YourClass {

    // You're declaring you'll assign a value for this field later in the code
    lateinit var someObject : SomeType

    fun doSomething(){
        someObject = SomeObject()
        someObject.method() // Totally fine !
    }
}

Чтобы избежать этой ошибки, вы ДОЛЖНЫ инициализировать свое свойство, прежде чем пытаться получить к нему доступ.иначе вы всегда получите эту ошибку.

Если инициализация зависит от условия, и вы не уверены, что это произошло или нет, вы можете проверить, позвонив ::propertyName.isInitialized как @ kartik malik предлагается, прежде чем пытаться использовать свойство.

0 голосов
/ 13 декабря 2018

При обратном вызове onMapReady вам необходимо присвоить свое свойство полученному аргументу:

override fun onMapReady(googleMap: GoogleMap) {
   mMap = googleMap
   initCameraIdleListener()
}

, только после этого вы можете позвонить initCameraIdleListener()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...