1

我写了这些代码行并得到了错误

引起: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))

}
4

2 回答 2

2

当您将属性声明为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进行检查。

于 2018-12-13T16:07:12.827 回答
1

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

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

只有在此之后你才能打电话initCameraIdleListener()

于 2018-12-13T15:54:55.250 回答