最初,我拥有的唯一活动是MapsActivity,它包含以下代码段:
class MapsActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener {
private lateinit var map: GoogleMap
当我用Java源代码创建MainActivity时,我调用MapActivity如下:
Intent i = new Intent(getApplicationContext(), MapsActivity.class);
startActivity(i);
但现在,我得到lateinit属性映射尚未初始化
我尝试了[这里][1]的建议,但它说lateinit修饰符是不允许的[1]:https://stackoverflow.com/questions/53076696/unable-to-initialize-googlemap-object-in-kotlin
这就是我初始化/修复映射的方式
private lateinit var map: GoogleMap
private val SYDNEY = LatLng(-33.87365, 151.20689)
.
.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment!!.getMapAsync { googleMap ->
map = googleMap
marker = googleMap.addMarker(MarkerOptions().title("Sydney").position(SYDNEY))
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15f))
googleMap.animateCamera(CameraUpdateFactory.zoomTo(10f), 2000, null)
}
为了避免在使用lateinit googleMap var时出错,最好只在映射对象值已分配给它时使用var。
您得到lateinit property map has not been initialized
是因为该属性在被分配任何值之前就被读取了。
如果你不能确保它只有在你分配了任何值之后才会被使用,那么最好使用private var map: GoogleMap? = null
,并在读取它之前检查它是否为空。