4

Facing Issues insert ContentProvider in AppModule.

My app level Module is

module {
        single { TinyDB.getInstance(get()) }
        single { DataRepository(get()) }
        viewModel { HomeViewModel(get()) }
    }

I have no idea how to use ContentProvider in Module

I have tried Code

val dataRepo = inject(DataRepository::class.java) 

this in my Content provider but after this my app start crashes and logcat show Error Massage

    java.lang.RuntimeException: Unable to get provider wastickerapps.newemojistickers.stickersforwhatsapp.whatsappUsages.StickerContentProvider: java.lang.IllegalStateException: StandAloneContext Koin instance is null
        at android.app.ActivityThread.installProvider(ActivityThread.java:5562)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5154)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5094)
        at android.app.ActivityThread.access$1600(ActivityThread.java:177)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5942)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
     Caused by: java.lang.IllegalStateException: StandAloneContext Koin instance is null
        at org.koin.standalone.StandAloneContext.getKoin(StandAloneContext.kt:68)
        at org.koin.standalone.KoinComponentKt.getKoinContext(KoinComponent.kt:42)
        at org.koin.standalone.KoinComponentKt.access$getKoinContext(KoinComponent.kt:1)
        at org.koin.standalone.KoinComponent$DefaultImpls.getKoin(KoinComponent.kt:36)
        at wastickerapps.newemojistickers.stickersforwhatsapp.whatsappUsages.StickerContentProvider.getKoin(StickerContentProvider.kt:27)
        at wastickerapps.newemojistickers.stickersforwhatsapp.whatsappUsages.StickerContentProvider.<init>(StickerContentProvider.kt:481)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1650)
        at android.app.ActivityThread.installProvider(ActivityThread.java:5547)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5154) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5094) 
        at android.app.ActivityThread.access$1600(ActivityThread.java:177) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:145) 
        at android.app.ActivityThread.main(ActivityThread.java:5942) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at 
  • Could you please elaborate this part "I have no idea how to use ContentProvider in Module" ? It would also help if you can update the question with the DataRepository source code and the class where you inject DataRepository. – Manu May 08 '19 at 07:40
  • have you called `startKoin` method in your application class? – Birju Vachhani Jul 15 '19 at 11:44

1 Answers1

6

Content Provider Initialise Before onCreate() method in Application() class,I have called startKoin from attachBaseContext() method in Application() class implement KoinComponent in my ContentProvider class and inject data repository in ContentProvider using this

 var dataRepo = inject<DataRepository>()

Here is the code for inject

inline fun <reified T : Any> inject(name: String = "", scope: Scope? = 
null, noinline parameters: ParameterDefinition = 
emptyParameterDefinition()) = lazy { get<T>(name, scope, parameters) }

inline fun <reified T : Any> get(name: String = "", scope: Scope? = 
null, noinline parameters: ParameterDefinition = e . 
mptyParameterDefinition()): T = getKoin().get(name, scope, parameters)
//
fun getKoin(): KoinContext = 
(org.koin.standalone.StandAloneContext.koinContext as KoinContext)