我的片段类中有一个变量:
private lateinit var dManager: DataManager
我要在第一次使用它之前对其进行初始化:
override fun onResume() {
super.onResume()
dManager = MyApp.gManager.getDataManager(sp,level,test)
if (dManager.hp< 1) {
...
...
...
}
}
此代码对我和大多数用户(99.5%)正常,但有时我会收到崩溃报告
lateinit属性dManager尚未初始化
这怎么可能发生?我应该怎么做才能防止这种情况?
答案 0 :(得分:1)
lateinit var使编译器意识到不是空
getDataManager(sp,level,test)有时可能返回null,因此为了安全起见,您的解决方案将类似于:-
override fun onResume() {
super.onResume()
dManager = MyApp.gManager.getDataManager(sp,level,test)
if (::dbManager.isInitialized && dManager.hp< 1) {
...
...
...
}
}
答案 1 :(得分:0)
可能是您的getDataManager(sp,level,test)
返回null
值
OR
根据文档,您必须使用.isInitialized
属性检查对象。
Returns true if this lateinit property has been assigned a value, and false otherwise.
Check lateinit var is initialized
lateinit var file: File
if (::file.isInitialized) { ... }