You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dagger Hilt向Activity注入依赖触发UninitializedPropertyAccessException错误

Dagger Hilt注入未初始化问题排查与解决

问题场景

需要在Activity中注入DataStoreManager类,相关代码如下:

DataStoreManager类定义:

class DataStoreManager (@ApplicationContext appContext: Context) {...}

提供实例的AppModule:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
   @Provides
   @Singleton
   fun provideDataStoreManager(@ApplicationContext appContext: Context): 
      DataStoreManager = DataStoreManager(appContext)
}

MainActivity中的调用代码:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
   @Inject lateinit var dataStoreManager: DataStoreManager

   private val userPreferencesFlow = dataStoreManager.userPreferencesFlow
}

运行时触发异常:

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property 
dataStoreManager has not been initialized

问题原因

userPreferencesFlow作为类的直接成员属性,会在MainActivity实例创建阶段(构造函数执行后、Hilt完成注入前)被立即初始化。而@Inject标记的lateinit属性dataStoreManager,要等到Activity的attachBaseContext生命周期之后、onCreate之前才会被Hilt完成注入。此时提前访问未初始化的dataStoreManager就会抛出未初始化异常。

解决方案

可以通过以下两种方式修复:

方式1:使用lazy延迟初始化属性

将userPreferencesFlow改为延迟初始化,直到首次调用时才会访问dataStoreManager,此时Hilt已经完成注入:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
   @Inject lateinit var dataStoreManager: DataStoreManager

   private val userPreferencesFlow by lazy {
       dataStoreManager.userPreferencesFlow
   }
}

方式2:在onCreate中初始化属性

将属性初始化逻辑移到onCreate方法中,此时Hilt已经完成注入:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
   @Inject lateinit var dataStoreManager: DataStoreManager
   private lateinit var userPreferencesFlow: Flow<UserPreferences> // 替换为实际泛型类型

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       userPreferencesFlow = dataStoreManager.userPreferencesFlow
       // 后续使用userPreferencesFlow
   }
}

内容的提问来源于stack exchange,提问作者vbp13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:35:26