You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:00:58