【问题标题】:Kotlin set value of global variableKotlin 设置全局变量的值
【发布时间】:2018-10-16 21:34:03
【问题描述】:

我们正在尝试设置以下代码中声明的全局变量的值

 class MyApplication: Application() {
    var globalVar = 2
}

现在我们有一个主活动,它有一个名为 etPerson 的编辑文本,我们想在 etPerson 中输入一个值并将输入的值设置为 globalVar
为什么是因为我们想在另一个 Activity 中调用数据库函数
这是调用数据库的代码

    var mApp = MyApplication()
    var intGlobalVar = mApp.globalVar
    println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@ globalINT = "+intGlobalVar)
    var ITEM = db.getItem(intGlobalVar)
    println("%%%%%%%%%%%%%%%%%% ITEM "+ITEM?.id+" name "+ITEM?.name)

为了清楚起见,这里是 DB 函数

    fun getItem(id: Int): Contact? {
    val db = this.writableDatabase
    val selectQuery = "SELECT  * FROM $TABLE_NAME WHERE $colId = ?"
    db.rawQuery(selectQuery, arrayOf(id.toString())).use {
        // .use requires API 16
        if (it.moveToFirst()) {
            val result = Contact(0)
            result.id = it.getInt(it.getColumnIndex(colId))
            result.name = it.getString(it.getColumnIndex(colName))
            return result
        }
    }
    return null
}

所以问题是将 var globalVar 设置为在主 Activity 上的 etPerson 中输入的值
这个概念可以使用 put 和 get 来完成,但这不是我们的目标

我们的问题是如何将 globalVar 设置为 Edit Text 中输入的值?

【问题讨论】:

    标签: android kotlin android-sqlite global-variables


    【解决方案1】:

    当您的应用启动时,只会创建一个 MyApplication() 类的对象,因此您不需要:

    var mApp = MyApplication()
    

    您可以在应用程序的任何位置访问MyApplication() 及其所有成员。

    MyApplication() 中声明一个companion 对象并将globalVar 的声明放入其中:

    class MyApplication: Application() {    
        companion object {
            var globalVar = 2
        } 
    
        override fun onCreate() {
            super.onCreate()
            // initialization code here
        }
    }
    

    因此,在您的 MainActivity 类或其他地方,您可以使用 MyApplication.Companion.globalVar 获取或设置其值。
    或者您可以在任何类中导入 globalVar 变量,例如:

    import yourpackagename.MyApplication.Companion.globalVar
    

    并简单地引用它globalVar

    您还需要在清单中声明MyApplication

      <application
            android:name=".MyApplication"
    

    【讨论】:

    • 谢谢,这似乎解决了问题我们有一个模型类,我们可以把这个伴随声明放在模型中吗?
    • 此伴随声明必须驻留在继承 Application 类的类中
    • 我们扩展了 Contact 类,它使 DBHelper 有点疯狂,但我们从这一行删除了零 val contact = Contact(0) 一切都很好 我们有一个悬赏问题stackoverflow.com/questions/52747527/…如果你想看看谢谢
    • 我会的,但是明天。时间不早了,我要走了
    • 非常感谢我们已经为此苦苦挣扎了数周
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多