我正在尝试使用改造进行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