1

Application インスタンスを保存して、databaseHelper のコンストラクターで使用しようとしていますが、アクティビティが databaseHelper をインスタンス化しようとすると、次の例外が発生します。

FATAL EXCEPTION: 
main Process: com.weatherupp.weatherupp, PID: 29092
java.lang.ExceptionInInitializerError
at com.weatherupp.weatherupp.ui.MainActivity.onCreate(MainActivity.kt:27)
[...]
Caused by: kotlin.UninitializedPropertyAccessException: lateinit 
property instance has not been initialized

例外につながるコードは次のとおりです。

MainActivity {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val provider = ForecastProvider()
[...]
}

ForecastProvider には、次のコンパニオン オブジェクトがあります。

companion object {
    val SOURCES = listOf(ForecastServer(), ForecastDb())
}

ForecastDb のコンストラクターは、次のように宣言された App.instance を参照する ForecastDbHelper のインスタンスを参照します。

class App : Application() {

  companion object {
    lateinit var instance: App
  }

  override fun onCreate() {
    super.onCreate()
    instance = this
  }

}

データベースを参照するすべてのコードにコメントを付けると、アプリはデータ ソースとして ForecastServer を使用して動作しますが、データベースを参照しようとすると、つまりアプリ インスタンスを参照しようとすると、Kotlin は UninitializedPropertyAccessException をスローします。

私は何時間もコードを見てきましたが、何が間違っているのかわかりません。どんな助けでも祝福されます、事前に皆さんに感謝します.

4

3 に答える 3

0

私は同じ問題に直面しました。このステートメントがアプリのマニフェストに存在するかどうかを確認してください

<application
android:name=".YourApp"
/>

あなたの場合、それはあるべきです

 <application
    android:name=".App"
    />
于 2018-08-07T22:34:30.547 に答える