Kotlin匕首刀柄注入未初始化

bqucvtff  于 2023-10-23  发布在  Kotlin
关注(0)|答案(2)|浏览(111)

我试图使用匕首柄,我设置了一切,但当我试图使用女巫的对象时,我得到了错误,我创建了一个依赖注入:kotlin.UninitializedPropertyAccessException: lateinit property exoPlayer has not been initialized
下面是我的模块提供程序:

@Module
@InstallIn(ServiceComponent::class)
object ServiceModule {
    @ServiceScoped
    @Provides
    fun provideExoPlayer(
        @ApplicationContext context: Context,
        audioAttributes: AudioAttributes
    ) = SimpleExoPlayer.Builder(context).build().apply {
        setAudioAttributes(audioAttributes, true)
        setHandleAudioBecomingNoisy(true)
    }
}

在我的活动中,我得到了:

@AndroidEntryPoint
class AudioActivity : AppCompatActivity(), Player.EventListener { {

    @Inject
    lateinit var exoPlayer: SimpleExoPlayer

然后我尝试在onCreate中添加一个侦听器

exoPlayer.addListener(this)

但是在这里我得到了一个错误,它没有初始化,我真的不明白,因为我认为依赖注入的目的是提供一个可以在任何地方注入的构造。为什么它没有被初始化?

5kgi1eie

5kgi1eie1#

实际上,您在ServiceComponent中提供了SimpleExoPlayer对象。由于您希望在Activity中注入SimpleExoPlayer,因此应该在ActivityComponent中提供它。我认为您可能需要一个模块或重用现有的模块

@Module
@InstallIn(ActivityComponent::class)
class ActivityModule {
    
    @ActivityScoped
    @Provides
    fun provideExoPlayer(
        @ApplicationContext context: Context,
        audioAttributes: AudioAttributes
    ) = SimpleExoPlayer.Builder(context).build().apply {
        setAudioAttributes(audioAttributes, true)
        setHandleAudioBecomingNoisy(true)
    }
}
3bygqnnd

3bygqnnd2#

您提到在onCreate()中的AudioActivity中,您只添加了一个侦听器。因此,考虑到您在应用/模块中正确设置了所有插件和依赖项,您可能忘记在Activity中调用super.onCreate()(注入魔法发生的地方),这是在您开始触摸任何注入字段之前需要的。

相关问题