Котлин устанавливает значение глобальной переменной

Мы пытаемся установить значение глобальной переменной, объявленной в приведенном ниже коде

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

Теперь у нас есть основное действие, в котором есть текст редактирования с именем etPerson, мы хотели бы ввести значение в etPerson и установить введенное значение равным globalVar
. Почему, потому что мы хотим вызвать функцию базы данных в другом Activity
Вот код, который вызывает DB

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

И для наглядности вот функция БД

    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 на значение, введенное в etPerson в основном Activity
Эта концепция может быть реализована с помощью команд put и get с намерениями, но это не наша цель.

Наш вопрос: как установить globalVar на значение, введенное в Edit Text?

7
0
34 267
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда ваше приложение запускается, будет создан один и только один объект класса MyApplication (), поэтому вам не нужно:

var mApp = MyApplication()

Вы можете получить доступ к MyApplication() и всем его участникам из любого места в вашем приложении.

Объявите объект companion в MyApplication() и поместите объявление 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"

Спасибо, что, кажется, решает проблему. У нас есть ModelClass, можем ли мы поместить это сопутствующее объявление в модель?

Vector 17.10.2018 00:32

Это сопутствующее объявление должно находиться в классе, который наследует класс Application.

forpas 17.10.2018 00:34

мы расширили класс Contact, что делает DBHelper немного сумасшедшим, но мы удалили ноль из этой строки val contact = Contact (0), и все в порядке. У НАС ЕСТЬ вопрос с наградой на stackoverflow.com/questions/52747527/…, если вы хотите взглянуть Спасибо

Vector 17.10.2018 00:42

Я сделаю это, но завтра. Уже поздно, и я скоро уйду

forpas 17.10.2018 00:44

Большое спасибо, мы боролись с этим в течение нескольких недель

Vector 17.10.2018 00:57

Другие вопросы по теме