我正在尝试将应用程序上下文注入给
“延迟属性应用程序尚未初始化”
异常。
CoreModule.kt
@Module
open class CoreModule {
@Singleton
@Provides
fun provideRealmHelper(): RealmHelper {
return RealmHelper()
}
}
MyApplication.kt
open class MyApplication : MultiDexApplication(), HasActivityInjector {
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
val log = LoggerFactory.getLogger(this.javaClass)!!
companion object {
var application: MyApplication? = null
fun getInstance(): MyApplication {
return application!!
}
}
override fun onCreate() {
try {
super.onCreate()
application = this
DaggerAppComponent.builder().application(this).build().inject(this)
} catch (e: Exception) {
log.error("Exception in Application", e)
Thread.setDefaultUncaughtExceptionHandler(GlobalExceptionHandler())
}
}
override fun activityInjector() = dispatchingAndroidInjector
}
AppComponent.kt
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class,CoreModule::class])
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApplication): Builder
fun build(): AppComponent
}
fun inject(myApplication: MyApplication)
fun inject(realmHelper: RealmHelper)
}//我需要这个类中的应用程序上下文。我在这里注射applicationContext。注入是正确的方式,还是我应该使用构造函数注入?
RealmHelper.kt
class RealmHelper @Inject constructor() {
//need application context here but getting "lateinit property application has not been initialized
@Inject
lateinit var application: MyApplication
init {
Realm.init(application) // null application
}
}注意: MyApplication被添加到AndoridManifest.xml中
发布于 2018-12-07 07:15:53
问题是你注释了你的字段,但没有注入。您可以像在应用程序类中那样注入字段:DaggerAppComponent.builder().application(this).build().inject(this)
或者,您可以将应用程序字段移到RealmHelper构造函数中,在核心模块中,需要编写一个提供函数来返回应用程序。如果你想看一个例子,我有一个应用程序。https://github.com/volkansahin45/Moneycim
发布于 2018-12-11 03:10:15
我需要这个类中的应用程序上下文。我在这里注射applicationContext。注入是正确的方式,还是我应该使用构造函数注入?
如果可能的话,总是倾向于构造函数注入而不是字段注入。
不需要您的CoreModule。下面的代码就足够了。
@Singleton
class RealmHelper @Inject constructor(private val application: MyApplication) {
//Your implementation
}组件中的fun inject(realmHelper: RealmHelper)也是不必要的。
删除这些行应该修复它,我很快就推出了一个演示项目,只是为了确保测试它。这里是一个快速的代码要点。
发布于 2019-07-08 12:57:17
这可能太迟了,但这可能对其他开发人员有帮助。
@set:Inject
internal var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity>? = null用这个代替
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>如果你在其他地方也有同样的错误,也要做同样的事情。使用@set:注入而不是@Inject,使用内部而不是lateinit。
这对我来说很有魅力。
https://stackoverflow.com/questions/53664063
复制相似问题