lateinit属性mMap尚未初始化

时间:2018-12-13 15:50:17

标签: android kotlin

我写了这些代码行并出现错误

原因: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 :(得分:1)

当您将属性声明为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 !
    }
}

为避免此错误,请务必先尝试初始化您的媒体资源,否则始终会收到此错误。

如果初始化取决于条件,并且不确定它是否发生,则可以在尝试使用该属性之前,按照建议的@kartik malik调用::propertyName.isInitialized进行检查。

答案 1 :(得分:0)

在onMapReady回调中,您需要将自己的属性分配给收到的参数:

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

只有在此之后,您才能致电initCameraIdleListener()