如何使用依赖注入初始化改造koin

问题描述

我正在尝试使用改造进行HTTP调用。使用koin注射。但是出现了错误

AppModule

val appModule = module {
viewmodel { Mainviewmodel() }
viewmodel { Searchviewmodel() }

single { HttpRepository() }
single { HttpService() }
single { ApiHelper() }

single { AdapterFactory() }

single {
    val gson: Gson = GsonBuilder()
        .enableComplexMapKeySerialization()
        .serializeNulls()
        .setDateFormat(DateFormat.LONG)
        .create()
    GsonConverterFactory.create(gson)
} bind GsonConverterFactory::class

single {
    val client = OkHttpClient.Builder()
    client.build()
}

single {

    val builder = Retrofit.Builder()
        .addConverterFactory(get<GsonConverterFactory>())
        .client(get())
    builder
}

}

应用

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

    startKoin {
        androidLogger()
        androidContext(this@MyApp)
        modules(appModule)
    }
}

存储库

class HttpRepository : KoinComponent {

private val httpService: HttpService by inject()
private val retrofitBuilder: Retrofit.Builder by inject()
private val apiHelper: ApiHelper by inject()
private var serviceInterface: IServiceInterface

init {
     serviceInterface =
        retrofitBuilder.baseUrl("http://httpbin.org/").build().create(IServiceInterface::class.java)
}

错误

    java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
at okhttp3.internal.Util.<clinit>(Util.java:87)
at okhttp3.internal.Util.immutableList(Util.java:234)
at okhttp3.OkHttpClient.<clinit>(OkHttpClient.java:124)
at okhttp3.OkHttpClient$Builder.<init>(OkHttpClient.java:449)
at com.socnetwork.AppModuleKt$appModule$1$8.invoke(AppModule.kt:39)
at com.socnetwork.AppModuleKt$appModule$1$8.invoke(UnkNown Source:4)
at org.koin.core.instance.DeFinitionInstance.create(DeFinitionInstance.kt:54)
at org.koin.core.instance.SingleDeFinitionInstance.get(SingleDeFinitionInstance.kt:40)
at org.koin.core.deFinition.BeanDeFinition.resolveInstance(BeanDeFinition.kt:70)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)
at org.koin.core.scope.Scope.get(Scope.kt:128)
at com.socnetwork.AppModuleKt$appModule$1$9.invoke(AppModule.kt:58)
at com.socnetwork.AppModuleKt$appModule$1$9.invoke(UnkNown Source:4)
at org.koin.core.instance.DeFinitionInstance.create(DeFinitionInstance.kt:54)
at org.koin.core.instance.SingleDeFinitionInstance.get(SingleDeFinitionInstance.kt:40)
at org.koin.core.deFinition.BeanDeFinition.resolveInstance(BeanDeFinition.kt:70)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)
at org.koin.core.scope.Scope.get(Scope.kt:128)
at com.socnetwork.http.HttpRepository$$special$$inlined$inject$2.invoke(Scope.kt:327)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.socnetwork.http.HttpRepository.getRetrofitBuilder(UnkNown Source:2)
at com.socnetwork.http.HttpRepository.<init>(HttpRepository.kt:18)
at com.socnetwork.AppModuleKt$appModule$1$3.invoke(AppModule.kt:23)
at com.socnetwork.AppModuleKt$appModule$1$3.invoke(UnkNown Source:4)
at org.koin.core.instance.DeFinitionInstance.create(DeFinitionInstance.kt:54)
at org.koin.core.instance.SingleDeFinitionInstance.get(SingleDeFinitionInstance.kt:40)
at org.koin.core.deFinition.BeanDeFinition.resolveInstance(BeanDeFinition.kt:70)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)
at org.koin.core.scope.Scope.get(Scope.kt:128)
at com.socnetwork.viewmodel.Searchviewmodel$$special$$inlined$inject$1.invoke(Scope.kt:327)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.socnetwork.viewmodel.Searchviewmodel.getService(UnkNown Source:2)
at com.socnetwork.viewmodel.Searchviewmodel.access$getService$p(Searchviewmodel.kt:14)
at com.socnetwork.viewmodel.Searchviewmodel$getUsers$1.invokeSuspend(Searchviewmodel.kt:25)
at com.socnetwork.viewmodel.Searchviewmodel$getUsers$1.invoke(UnkNown Source:10)
at com.socnetwork.viewmodel.Searchviewmodel$getNetworkResult$1.invokeSuspend(Searchviewmodel.kt:36)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.dispatchedKt.resumeCancellable(dispatched.kt:457)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
at kotlinx.coroutines.Coroutinestart.invoke(Coroutinestart.kt:109)
at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:154)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
at kotlinx.coroutines.BuildersKt.launch(UnkNown Source:1)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
at kotlinx.coroutines.BuildersKt.launch$default(UnkNown Source:1)
at com.socnetwork.viewmodel.Searchviewmodel.getNetworkResult(Searchviewmodel.kt:35)
at com.socnetwork.viewmodel.Searchviewmodel.getUsers(Searchviewmodel.kt:25)
at com.socnetwork.ui.SearchFragment.getUsers(SearchFragment.kt:53)
at com.socnetwork.ui.SearchFragment.onViewCreated(SearchFragment.kt:49)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
2020-09-24 11:50:32.361 700-700/com.socnetwork E/AndroidRuntime:     at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1188)
at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.movetoState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
at android.app.Activity.performStart(Activity.java:7157)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
at android.app.servertransaction.TransactionExecutor.performlifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycletoPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.classCastException: Bootstrap method returned null
... 82 more

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)