【问题标题】:UninitializedPropertyAccessException using Hilt使用 Hilt 的 UninitializedPropertyAccessException
【发布时间】:2020-12-08 07:41:01
【问题描述】:
@Module
@InstallIn(ApplicationComponent::class)
object AppDataModule {
     @Provides
     @Singleton
     fun provideAU(loginPreferences: LoginPreferences, @ApplicationContext context: Context): AccountUtil = AccountUtil (loginPreferences, context)
}

class SomeClass { 

    @Inject
    lateinit var accountUtil: AccountUtil

    constructor(context:Context){}

    constructor(context:Context, obj:SomeClass1){}

    init {
       accountUtil.isLoggedIn()
    }
}

我明白了

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

我该如何解决这个问题?我需要在 Hilt 中使用自定义组件吗?

【问题讨论】:

    标签: android kotlin dagger-2 dagger-hilt


    【解决方案1】:

    确保您的应用程序是 @HiltApplication

    @HiltAndroidApp class Application: Application()
    

    然后,一旦你创建了这样的模块

    @Module
    @InstallIn(ApplicationComponent::class)
    object AppDataModule {
         @Provides
         @Singleton
         fun provideAU(loginPreferences: LoginPreferences, @ApplicationContext context: Context): AccountUtil = AccountUtil (loginPreferences, context)
    }
    

    确保你要注入的类被注入到构造函数中

    class SomeClass @Inject constructor(private var accountUtil: AccountUtil) { 
        init { accountUtil.isLoggedIn() }
    }
    
    class SomeClass @Inject constructor(){ 
        @Inject constructor(private var accountUtil: AccountUtil)
        @Inject constructor(private var util1: AccountUtil, private var util2: AccountUtil)
        init { accountUtil.isLoggedIn() }
    }
    

    【讨论】:

    • 如果 SomeClass 有多个构造函数,那么我该如何注入? @布兰登
    • @Arun 我已经更新了答案以显示多个构造函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2021-04-16
    • 2020-11-24
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多