无法使用Kotlin在我的Android应用中为全局变量创建一个类

时间:2018-01-22 02:25:54

标签: class kotlin global-variables

我试图在我的应用程序中定义一个全局变量 这是说必须定义或抽象财产。 我看过并试图复制一些解决方案,但似乎无法让它工作

任何建议表示赞赏。

package com.example.app.thisweekintown

import android.app.Application

class GlobalVars:Application() {

    var isConnected:Boolean

    }

3 个答案:

答案 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

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

答案 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
}