无法使用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 }