Мы пытаемся установить значение глобальной переменной, объявленной в приведенном ниже коде
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?
Когда ваше приложение запускается, будет создан один и только один объект класса 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"
Это сопутствующее объявление должно находиться в классе, который наследует класс Application.
мы расширили класс Contact, что делает DBHelper немного сумасшедшим, но мы удалили ноль из этой строки val contact = Contact (0), и все в порядке. У НАС ЕСТЬ вопрос с наградой на stackoverflow.com/questions/52747527/…, если вы хотите взглянуть Спасибо
Я сделаю это, но завтра. Уже поздно, и я скоро уйду
Большое спасибо, мы боролись с этим в течение нескольких недель
Спасибо, что, кажется, решает проблему. У нас есть ModelClass, можем ли мы поместить это сопутствующее объявление в модель?