Trying to implement Koin unsuccessfully. Getting t...
# koin
s
Trying to implement Koin unsuccessfully. Getting the following error. I’ve uncommented a line in the fragment
binding.viewmodel = viewModel
where previously the error was Koin not correctly configured.
a
If you can post the Koin module/s definition, it would be easier to help you.
s
Copy code
val viewModelModule= module {
    viewModel { JokeViewModel(get()) }
}
Copy code
class JokeViewModel(private val jokeRepository: JokeRepository): ViewModel() {


    private val viewModelJob = SupervisorJob()
    private val viewModelScope  = CoroutineScope(viewModelJob + Dispatchers.Main)


    val jokeResults = jokeRepository.results

    init {
        refreshFromRepository()
    }

    fun refreshFromRepository(){
        viewModelScope.launch {
            try {
                jokeRepository.refreshJokes()
            }
            catch(networkError: Exception){

            }
        }
    }

    override fun onCleared() {
        super.onCleared()
        viewModelScope.cancel()
    }
}
a
It does not look like the Koin error. It looks like you have incorrectly configured
com.google.android.gms
library.
s
2020-10-16 17:02:50.851 9837-9837/com.example.parking_application E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.parking_application, PID: 9837
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 
Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [Factory:'com.example.parking_application.viewmodel.MapsViewModel']
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:59)
at org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:36)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:87)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:214)
at org.koin.core.scope.Scope.get(Scope.kt:181)
at org.koin.android.viewmodel.ViewModelFactoryKt$defaultViewModelFactory$1.create(ViewModelFactory.kt:13)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at org.koin.android.viewmodel.ViewModelResolutionKt.get(ViewModelResolution.kt:21)
at org.koin.android.viewmodel.ViewModelResolutionKt.resolveInstance(ViewModelResolution.kt:10)
at org.koin.android.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:68)
at org.koin.android.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:56)
at org.koin.android.viewmodel.koin.KoinExtKt.getViewModel(KoinExt.kt:34)
at org.koin.android.viewmodel.ext.android.ViewModelStoreOwnerExtKt.getViewModel(ViewModelStoreOwnerExt.kt:66)
at com.example.parking_application.MapsActivity$onMapReady$$inlined$viewModel$1.invoke(ViewModelStoreOwnerExt.kt:71)
at com.example.parking_application.MapsActivity$onMapReady$$inlined$viewModel$1.invoke(Unknown Source:0)
at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
at com.example.parking_application.MapsActivity.onMapReady(MapsActivity.kt:42)
at com.google.android.gms.maps.zzak.zza(Unknown Source:2)
at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source:12)
at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source:12)
at android.os.Binder.transact(Binder.java:1043)
at dl.b(:com.google.android.gms.dynamite_mapsdynamite@203615100@20.36.15 (150700-0):2)
at com.google.maps.api.android.lib6.impl.bf.run(:com.google.android.gms.dynamite_mapsdynamite@203615100@20.36.15 (150700-0):2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 
Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [Single:'com.example.parking_application.repository.ParkingLocationRepository']
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:59)
at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:40)
at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:48)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:87)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:214)
at org.koin.core.scope.Scope.get(Scope.kt:181)
at com.example.parking_application.di.ViewModleModuleKt$viewModelModule$1$1.invoke(ViewModleModule.kt:13)
at com.example.parking_application.di.ViewModleModuleKt$viewModelModule$1$1.invoke(Unknown Source:4)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50)
at org.koin.core.instance.FactoryInstanceFactory.get(FactoryInstanceFactory.kt:36)
 
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:87)
 
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:214)
 
at org.koin.core.scope.Scope.get(Scope.kt:181)
 
at org.koin.android.viewmodel.ViewModelFactoryKt$defaultViewModelFactory$1.create(ViewModelFactory.kt:13)
 
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
 
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
 
at org.koin.android.viewmodel.ViewModelResolutionKt.get(ViewModelResolution.kt:21)
 
at org.koin.android.viewmodel.ViewModelResolutionKt.resolveInstance(ViewModelResolution.kt:10)
 
at org.koin.android.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:68)
 
at org.koin.android.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:56)
 
at org.koin.android.viewmodel.koin.KoinExtKt.getViewModel(KoinExt.kt:34)
 
at org.koin.android.viewmodel.ext.android.ViewModelStoreOwnerExtKt.getViewModel(ViewModelStoreOwnerExt.kt:66)
 
at com.example.parking_application.MapsActivity$onMapReady$$inlined$viewModel$1.invoke(ViewModelStoreOwnerExt.kt:71)
 
at com.example.parking_application.MapsActivity$onMapReady$$inlined$viewModel$1.invoke(Unknown Source:0)
 
at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
 
at com.example.parking_application.MapsActivity.onMapReady(MapsActivity.kt:42)
 
at com.google.android.gms.maps.zzak.zza(Unknown Source:2)
 
at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source:12)
 
at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source:12)
 
at android.os.Binder.transact(Binder.java:1043)
 
at dl.b(:com.google.android.gms.dynamite_mapsdynamite@203615100@20.36.15 (150700-0):2)
 
at com.google.maps.api.android.lib6.impl.bf.run(:com.google.android.gms.dynamite_mapsdynamite@203615100@20.36.15 (150700-0):2)
 
at android.os.Handler.handleCallback(Handler.java:938)
 
at android.os.Handler.dispatchMessage(Handler.java:99)
 
at android.os.Looper.loop(Looper.java:223)
 
at android.app.ActivityThread.main(ActivityThread.java:7656)
 
at java.lang.reflect.Method.invoke(Native Method)
 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 
Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [Single:'com.example.parking_application.database.LocationDatabase']
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:59)
2020-10-16 17:02:50.851 9837-9837/com.example.parking_application E/AndroidRuntime:     at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:40)
at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:48)
at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:87)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:214)
at org.koin.core.scope.Scope.get(Scope.kt:181)
at com.example.parking_application.di.RepositoryModuleKt$repositoryModule$1$2.invoke(RepositoryModule.kt:20)
at com.example.parking_application.di.RepositoryModuleKt$repositoryModule$1$2.invoke(Unknown Source:4)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50)
... 38 more
Caused by: java.lang.RuntimeException: cannot find implementation for com.example.parking_application.database.LocationDatabase. LocationDatabase_Impl does not exist
at androidx.room.Room.getGeneratedImplementation(Room.java:94)
at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:851)
at com.example.parking_application.di.DatabaseModuleKt$databaseModule$1$1.invoke(DatabaseModule.kt:14)
at com.example.parking_application.di.DatabaseModuleKt$databaseModule$1$2.invoke(DatabaseModule.kt:17)
at com.example.parking_application.di.DatabaseModuleKt$databaseModule$1$2.invoke(Unknown Source:4)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50)
The debug error is stating could not create instance for ViewModel, DatabaseModule, ViewModule, etc.
Also
LocationDatabase_Impl does not exist
The instances are being created by Koin in Modules.