kotlin java.lang.IllegalStateException: KoinApplication尚未启动

tyg4sfes  于 2022-12-23  发布在  Kotlin
关注(0)|答案(4)|浏览(362)

我正在使用koin学习Kotlin。当在catlog中运行应用程序时,我看到以下消息。

java.lang.非法状态异常:KoinApplication尚未启动

尽管我在MyApplication中使用了startKoin

class MyApplication : Application() {

    var listOfModules = module {
        single { GitHubServiceApi() }
    }

    override fun onCreate() {
        super.onCreate()

        startKoin {
            androidLogger()
            androidContext(this@MyApplication)
            modules(listOfModules)
        }

    }

}

v1uwarro

v1uwarro1#

在清单文件中添加“android:name=".TheApplication”解决了该问题。

android:name=".TheApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_app_icon_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.Shrine">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

“android:name=".TheApplication”是来自Koin的类名

class TheApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        }

        startKoin {
            androidLogger()
            androidContext(androidContext = this@TheApplication)

            modules(
                listOfModules
            )
        }
    }
}
hivapdat

hivapdat2#

基本上,你需要在Manifest中给予你调用startKoin()方法的类名作为应用程序名,这样你就可以配置日志记录、属性加载和模块。https://doc.insert-koin.io/#/koin-core/dsl

rt4zxlrg

rt4zxlrg3#

private fun getKoin(activity: ComponentActivity): Koin {
return if (activity is KoinComponent) {
    activity.getKoin()
} else {
    GlobalContext.getOrNull() ?: startKoin {
        androidContext(activity)
        modules(listModule)
    }.koin
}

}

fun ComponentActivity.contextAwareActivityScope() = runCatching {
LifecycleScopeDelegate<Activity>(
    lifecycleOwner = this,
    koin = getKoin(this)
)}.getOrElse { activityScope() 
}
xxe27gdn

xxe27gdn4#

在manifest.xml中,

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

在应用程序标记中添加此行。

相关问题