1. ホーム
  2. android

[解決済み] Kotlinはグローバル変数の値を設定する

2022-02-10 01:44:49

質問

以下のコードで宣言されたグローバル変数の値を設定しようとしています。

 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)

そして、わかりやすくするために、以下は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
}

つまり、Main ActivityのetPersonに入力された値をvar globalVarに設定することが問題です。
このコンセプトは、インテントのputとgetを使用して達成することができますが、ここではそれが目的ではありません。

問題は、Edit Textに入力された値をglobalVarに設定するにはどうしたらいいかということです。

どのように解決するのですか?

アプリを起動すると、MyApplication()クラスのオブジェクトが1つだけ作成されるので、その必要はありません。

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"