没有配置Koin上下文请使用startKoin或koinApplication DSL

问题描述

koin可在我的大多数相同型号的设备上正常运行,但会导致单个设备出现IllegalStateException崩溃, 我已经将android上下文作为applicationContext了,但是仍然会导致崩溃。

在更新到最新版本之前,它引发了“原因:java.lang.IllegalStateException:KoinApplication尚未启动”,但是在更新之后

E/AndroidRuntime: FATAL EXCEPTION: main
Process: #######,PID: 31641
java.lang.RuntimeException: Unable to start activity ComponentInfo{###.activities.SplashScreenActivity}: java.lang.IllegalStateException: No Koin Context configured. Please use startKoin or koinApplication DSL.
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3044)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3122)
at android.app.ActivityThread.-wrap11(UnkNown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1819)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6892)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:875)
Caused by: java.lang.IllegalStateException: No Koin Context configured. Please use startKoin or koinApplication DSL.
at org.koin.core.context.KoinContextHandler.getContext(KoinContextHandler.kt:29)
at org.koin.core.context.KoinContextHandler.get(KoinContextHandler.kt:35)
at org.koin.android.ext.android.ComponentCallbackExtKt.getKoin(ComponentCallbackExt.kt:15)
at org.koin.androidx.viewmodel.ext.android.viewmodelStoreOwnerExtKt.getKoin(viewmodelStoreOwnerExt.kt:63)
at org.koin.androidx.viewmodel.ext.android.viewmodelStoreOwnerExtKt.getviewmodel(viewmodelStoreOwnerExt.kt:60)
at .SplashScreenActivity$$special$$inlined$viewmodel$1.invoke(viewmodelStoreOwnerExt.kt:45)
at #######.activities.SplashScreenActivity$$special$$inlined$viewmodel$1.invoke(UnkNown Source:0)
at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
at #########activities.SplashScreenActivity.getMviewmodel(UnkNown Source:7)
at #########.activities.SplashScreenActivity.onCreate(SplashScreenActivity.kt:86)
at android.app.Activity.performCreate(Activity.java:7147)
at android.app.Activity.performCreate(Activity.java:7138)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1219)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2997)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3122) 
at android.app.ActivityThread.-wrap11(UnkNown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1819) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:192) 
at android.app.ActivityThread.main(ActivityThread.java:6892) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:875) 

我正在应用程序类中启动koin:

startKoin { //声明使用的Android上下文 androidContext(this @ QairosApplication) //声明模块 模块(myModule) }

解决方法

在清单文件中,您需要提供使用startKoin {}的类的名称。例如,如果您在名为BaseApplication的类中启动Koin,则清单中的代码应如下所示:

 <application
    android:name=".BaseApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

在BaseApplication类中:

class BaseApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        startKoin {
            androidLogger()
            androidContext(this@BaseApplication)
            modules(listOf(module1,module2))
        }
}