我试图在我的应用程序中定义一个全局变量 这是说必须定义或抽象财产。 我看过并试图复制一些解决方案,但似乎无法让它工作
任何建议表示赞赏。
package com.example.app.thisweekintown
import android.app.Application
class GlobalVars:Application() {
var isConnected:Boolean
}
答案 0 :(得分:2)
您可以在Kotlin中定义全局变量,而无需使用名为lateinit
例如:
lateinit var obj: ClassName
lateinit var str: String
如果您尝试在初始化之前访问全局变量,那么您将获得以下异常。
引起:kotlin.UninitializedPropertyAccessException:lateinit property obj / str尚未初始化。
要避免异常,请参阅this
但是lateinit不支持原始类型
lateinit var isConnected:Boolean//'lateinit' modifier is not allowed on properties of primitive types
答案 1 :(得分:1)
最后我错误地打电话给了班级。我正在实例化一个类的实例,而不仅仅是将变量作为应用程序级别的一部分调用。我要改写使用ViewModels的东西,但此时我将继续使用它,因为我需要继续前进。
从一个活动我可以得到并设置:
(applicationContext as GlobalVars).setSomeVariable(true)
(applicationContext as GlobalVars).getSomeVariable()
来自碎片 (activity.applicationContext as GlobalVars).setSomeVariable(true) (activity.applicationContext as GlobalVars).getSomeVariable()
我还重写了GlovalVars类来显示getter和setter:
class GlobalVars:Application() {
private var isConnected: Boolean = false
fun getSomeVariable(): Boolean {
return isConnected
}
fun setSomeVariable(someVariable: Boolean) {
this.isConnected = someVariable
}
答案 2 :(得分:0)
您需要初始化变量:
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
}