我正在尝试在我的应用程序中定义一个全局变量它说属性必须是定义的或抽象的。我已经查看并尝试复制一些解决方案,但似乎无法使其正常工作
任何建议表示赞赏。
package com.example.app.thisweekintown
import android.app.Application
class GlobalVars:Application() {
var isConnected:Boolean
}
您可以使用名为 lateinit
的关键字在 Kotlin 中定义全局变量,而无需初始化
前任:
lateinit var obj: ClassName
lateinit var str: String
如果在初始化之前尝试访问全局变量,则会出现以下异常。
原因:科特林。UninitializedPropertyAccessException: lateinit 属性 obj/str 尚未初始化。
要避免异常,请参阅此内容
但是lateinit不支持基元类型
lateinit var isConnected:Boolean//'lateinit' modifier is not allowed on properties of primitive types
编号 : https://stackoverflow.com/a/38769161/5898862
您需要初始化变量:
class GlobalVars : Application() {
var isConnected: Boolean = false
}
或按照JEGADEESAN的回答中所述使用lateinit
。
另外,如果您计划始终拥有GlobalVars
的单个实例,我相信您可能会对对象声明感兴趣:http://kotlinlang.org/docs/reference/object-declarations.html
object GlobalVars : Application() {
var isConnected: Boolean = false
}
最后我错误地调用了该类。我正在实例化类的一个实例,而不仅仅是调用变量作为应用程序级别的一部分。我将重写内容以使用ViewModels,但此时我将使用它,因为我需要继续前进。
从活动中,我可以通过以下方式获取和设置内容:
(applicationContext as GlobalVars).setSomeVariable(true)
(applicationContext as GlobalVars).getSomeVariable()
从片段 (activity.applicationContext as GlobalVars(.setSomeVariable(true( (activity.applicationContext as GlobalVars(.getSomeVariable((
我还重写了 GlovalVars 类以显示 getter 和 setters:
class GlobalVars:Application() {
private var isConnected: Boolean = false
fun getSomeVariable(): Boolean {
return isConnected
}
fun setSomeVariable(someVariable: Boolean) {
this.isConnected = someVariable
}