带有Dagger2的Android Kotlin,lateinit var尚未初始化

真棒

我是Dagger的新手,使用它时遇到了麻烦。

我要开发的是使用RxAndroidBle并由Dagger初始化以提供Context。

因此,我研究了如何实现它,并编写了一些代码,它似乎对我有用,但根本不起作用。

以下是我的代码。

AppComponent.kt

@Singleton
@Component(modules = [
    AppModule::class,
    BluetoothModule::class,
    AndroidInjectionModule::class])
interface AppComponent : AndroidInjector<BluetoothController> {

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun application(app: Application): Builder

        fun build(): AppComponent
    }
}

AppModule.kt

@Module
class AppModule {

    @Provides
    @Named("appContext")
    @Singleton
    fun provideContext(application: Application): Context =
            application.applicationContext
}

蓝牙模块

@Module
class BluetoothModule {

    @Provides
    @Named("rxBleClient")
    @Singleton
    fun provideRxBleClient(@Named("appContext") context: Context):RxBleClient =
            RxBleClient.create(context)
}

由DaggerApplication注入的BluetoothController.kt。

class BluetoothController : DaggerApplication() {

    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder().application(this).build()
    }
}

我已将android:name“ .BluetoothController”插入AndroidManifest.xml

这就是我将如何使用它。

@field:[Inject Named("rxBleClient")]
lateinit var rxBleClient: RxBleClient

但是它总是会出现错误提示:lateinit属性上下文尚未初始化

我错过了什么?谁能帮我?

提前致谢。

尼特什

添加以下代码以实现此目的。

  1. ActivityBuilderModule在活动中创建用于注入。考虑我们的活动为MainActivity

    @Module
    abstract class ActivityBuilderModule {
         @ContributesAndroidInjector(modules=[MainActivityModule::class])
         abstract fun contributeSplashActivity(): MainActivity
    }
    
  2. 建立你的 MainActivityModule

    @Module
    class MainActivityModule{
         @Provides()
         fun contributeSplashActivity(mainActivity: MainActivity): 
            MainActivity=mainActivity
     }
    
  3. 修改您的组件。

    @Singleton
    @Component(modules = [
    AppModule::class,
    BluetoothModule::class,
    ActivityBuilderModule::class,
    AndroidInjectionModule::class])
    interface AppComponent : AndroidInjector<BluetoothController> {
    
        @Component.Builder
        interface Builder {
    
            @BindsInstance
            fun application(app: Application): Builder
    
            fun build(): AppComponent
        }
    }
    
  4. 在MainActivity中,只需注入即可。

    class MainActivity{
          ...
          @Inject
          lateinit var rxBleClient: RxBleClient
          override fun onCreate(savedInstanceState: Bundle?) {
    
            AndroidInjection.inject(this)
            super.onCreate(savedInstanceState)
          }
    }
    

如有任何问题,请通知我们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Dagger2 + Kotlin:lateinit属性尚未初始化

MVP + Dagger2 + Kotlin:lateinit属性演示者尚未初始化

Dagger:lateinit 属性尚未初始化

Dagger - lateinit 属性演示者尚未初始化 android

lateinit属性适配器尚未在Kotlin4Android中初始化

androidInjector尚未初始化匕首2 lateinit财产

kotlin.UninitializedPropertyAccessException:lateinit 属性尚未初始化

Kotlin与Spring DI:lateinit属性尚未初始化

kotlin.UninitializedPropertyAccessException:lateinit属性adapterPosts尚未初始化

Kotlin - lateinit 属性 fragmentHomeBinding 尚未初始化

Kotlin + SpringBoot:DI lateinit属性服务尚未初始化

kotlin.UninitializedPropertyAccessException:lateinit属性roomClickedInterface尚未初始化

kotlin.UninitializedPropertyAccessException:lateinit 属性 mRepository 尚未初始化

lateinit属性apiComponent尚未在Dagger 2中初始化

在初始化lateinit var时通知(Kotlin)

lateinit属性newTrack尚未初始化

lateinit属性的性别尚未初始化

lateinit 属性 mUserViewModel 尚未初始化

Lateinit属性mScrollView尚未初始化

lateinit 属性 homeViewModel 尚未初始化

@Autowired lateinit属性''尚未初始化

lateinit属性ABC尚未初始化

UninitializedPropertyAccessException:lateinit属性尚未初始化

lateinit 属性绑定尚未初始化

lateinit 属性响应尚未初始化

在Kotlin上将WebTestClient与SpringBootTest一起使用时,“ lateinit属性<varName>尚未初始化”

kotlin.UninitializedPropertyAccessException:lateinit属性首选项尚未初始化

Kotlin lateInit尚未被初始化错误使应用程序崩溃

如何修复 MainActivity?kotlin.UninitializedPropertyAccessException:lateinit 属性 CompositeDiposable 尚未初始化