无法使用Kotlin在我的Android应用程序中为全局variables创建一个类

我试图在我的应用程序中定义一个全局variables它是说,属性必须定义或抽象。 我看了,并试图复制一些soltuions,但似乎无法得到它的工作

任何意见赞赏。

package com.example.app.thisweekintown import android.app.Application class GlobalVars:Application() { var isConnected:Boolean } 

您可以在Kotlin中定义全局variables,而无需使用名为lateinit的关键字进行初始化

例如:

 lateinit var obj: ClassName lateinit var str: String 

如果你尝试在初始化之前访问全局variables,那么你会得到下面的exception。

引起:kotlin.UninitializedPropertyAccessException:lateinit属性obj / str尚未初始化。

为避免exception,请参阅此处

但是lateinit不支持原始types

 lateinit var isConnected:Boolean//'lateinit' modifier is not allowed on properties of primitive types 

参考: https : //stackoverflow.com/a/38769161/5898862

您需要初始化variables:

 class GlobalVars : Application() { var isConnected: Boolean = false } 

或者使用lateinit回答中描述的lateinit。

此外,如果你打算总是有单一的GlobalVars实例,我相信你可能会对对象声明感兴趣: http : //kotlinlang.org/docs/reference/object-declarations.html

 object GlobalVars : Application() { var isConnected: Boolean = false } 

最后我不正确地打电话给class级。 我正在实例化类的一个实例,而不是仅仅调用该variables作为应用程序级别的一部分。 我将重写使用ViewModels的东西,但是现在我要继续工作,因为我需要继续前进。

从活动中我可以得到和设置的东西:

 (applicationContext as GlobalVars).setSomeVariable(true) (applicationContext as GlobalVars).getSomeVariable() 

从一个片段(activity.applicationContext as GlobalVars).setSomeVariable(true)(activity.applicationContext as GlobalVars).getSomeVariable()

我还重写了GlovalVars类以显示获取者和设置者:

 class GlobalVars:Application() { private var isConnected: Boolean = false fun getSomeVariable(): Boolean { return isConnected } fun setSomeVariable(someVariable: Boolean) { this.isConnected = someVariable }