Kotlin中geofenceList未初始化导致应用启动崩溃求助
问题解决:全局Geofence列表初始化导致的崩溃
崩溃的核心原因是你用lateinit var声明了geofenceList,但从未对其进行初始化就调用了add()方法,触发了UninitializedPropertyAccessException。以下是几种可行的修复方案:
方案1:直接初始化全局可变列表
把全局变量改为直接初始化的MutableList,无需依赖lateinit,使用前就拥有可用实例:
var geofenceList: MutableList<Geofence> = mutableListOf()
之后在onCreate方法中正常调用add()添加元素即可,既保留全局可访问性,又支持随时修改列表内容。
方案2:用lazy委托实现延迟初始化
如果想保留延迟初始化的特性,可使用lazy委托,它会在第一次访问变量时自动完成初始化:
val geofenceList: MutableList<Geofence> by lazy { mutableListOf() }
这种方式下变量引用是不可变的(val),但列表本身是MutableList,依然可以调用add()、remove()等方法修改内部元素,同时保持全局访问性。
方案3:改用只读List类型
若你更倾向于使用只读的List,可以在内部维护一个可变列表作为数据源,对外暴露只读的List视图:
// 内部可变列表,用于修改数据 private val _geofenceList: MutableList<Geofence> = mutableListOf() // 对外暴露只读List,外部只能调用只读方法 val geofenceList: List<Geofence> get() = _geofenceList
在onCreate中依然向内部的可变列表添加元素:
_geofenceList.add(Geofence.Builder() .setRequestId("Toets") .setCircularRegion(latitude, longitude, radius) .setExpirationDuration(Geofence.NEVER_EXPIRE) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER) .build())
这样外部访问geofenceList时只能读取数据,无法直接修改,保证了数据的安全性,同时内部仍可自由维护列表内容。
内容的提问来源于stack exchange,提问作者Izak
相关产品推荐
相关产品推荐

