如何在 Android Studio 中使用 Hilt 依赖注入 MediaRecorder?
How can I dependency injection MediaRecorder with Hilt in Android Studio?
我希望在 Android Studio 中使用 Hilt 进行依赖注入 MediaRecorder
对象。
但是代码 A 得到错误 'lateinit' modifier is not allowed on properties of nullable types .
并且代码 B 得到错误 Dagger 不支持注入私有字段。
Code C可以编译,但不是我需要的。我需要将 mRecorder
定义为可空的,这样我就可以使用 mRecorder = null
来释放它。
如何修复代码 A?
代码A
@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
@Inject lateinit var mRecorder: MediaRecorder?
}
@InstallIn(SingletonComponent::class)
@Module
object ObjectModule {
@Provides
@Singleton
fun provideMediaRecorder(): MediaRecorder {
return MediaRecorder()
}
}
代码B
@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
@Inject var mRecorder: MediaRecorder? =null
}
...
代码C
@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
@Inject lateinit var mRecorder: MediaRecorder
}
...
如果您没有对 component/injector 对象的引用,则无法进行 属性 注入。您可能希望将记录器添加为构造函数参数。
@HiltViewModel
class SoundViewModel @Inject constructor(private val recorder: MediaRecorder
): ViewModel()
或者,如果你真的想让你的记录器可以为空,你可以使用 Provider
:
@HiltViewModel
class SoundViewModel @Inject constructor(private val recorderProvider: Provider<MediaRecorder>
): ViewModel(){
private val recorder : MediaRecorder? = null
init {
recorder = recorderProvider.get()
}
}
要释放您的媒体记录器,请使用 mediaRecorder.release()
功能。
我希望在 Android Studio 中使用 Hilt 进行依赖注入 MediaRecorder
对象。
但是代码 A 得到错误 'lateinit' modifier is not allowed on properties of nullable types .
并且代码 B 得到错误 Dagger 不支持注入私有字段。
Code C可以编译,但不是我需要的。我需要将 mRecorder
定义为可空的,这样我就可以使用 mRecorder = null
来释放它。
如何修复代码 A?
代码A
@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
@Inject lateinit var mRecorder: MediaRecorder?
}
@InstallIn(SingletonComponent::class)
@Module
object ObjectModule {
@Provides
@Singleton
fun provideMediaRecorder(): MediaRecorder {
return MediaRecorder()
}
}
代码B
@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
@Inject var mRecorder: MediaRecorder? =null
}
...
代码C
@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
@Inject lateinit var mRecorder: MediaRecorder
}
...
如果您没有对 component/injector 对象的引用,则无法进行 属性 注入。您可能希望将记录器添加为构造函数参数。
@HiltViewModel
class SoundViewModel @Inject constructor(private val recorder: MediaRecorder
): ViewModel()
或者,如果你真的想让你的记录器可以为空,你可以使用 Provider
:
@HiltViewModel
class SoundViewModel @Inject constructor(private val recorderProvider: Provider<MediaRecorder>
): ViewModel(){
private val recorder : MediaRecorder? = null
init {
recorder = recorderProvider.get()
}
}
要释放您的媒体记录器,请使用 mediaRecorder.release()
功能。