我写了这些代码行并出现错误
原因: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))
}
答案 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()