当前位置: 首页 > 知识库问答 >
问题:

Kotlin+Dagger 2“LateInit属性databaseService尚未初始化”

穆正青
2023-03-14

我的代码成功构建,但每当我运行它时都会出现异常。不知道为什么匕首2不初始化变量。请告诉我哪里错了。给出以下例外情况:

UninitializedPropertyAccessException:lateinit属性databaseService尚未初始化

class MyApplication : Application() {

    private val TAG: String = "MyApplication"

    lateinit var applicationComponent: ApplicationComponent

    @Inject
    lateinit var databaseService: DatabaseService

    private lateinit var addedPackages: ArrayList<String>

    override fun onCreate() {
        super.onCreate()
        applicationComponent = buildApplicationComponent()
        applicationComponent.inject(this)

        addedPackages = databaseService.packagesDao().getAllPackages()

    }

    private fun buildApplicationComponent() =
        DaggerApplicationComponent.builder()
            .applicationModule(ApplicationModule(this))
            .build()
}
@Singleton
@Component(modules = [ApplicationModule::class])
interface ApplicationComponent {

    fun inject(application: Application)

    fun databaseService(): DatabaseService

    fun compositeDisposable(): CompositeDisposable

}
@Module
class ApplicationModule(private val application: Application) {

    @ApplicationContext
    @Provides
    fun provideContext() = application

    @Singleton
    @Provides
    fun provideDatabaseService() = Room.databaseBuilder(application, DatabaseService::class.java, "VersionChecker").build()

    @Provides
    fun provideCompositeDisposable() = CompositeDisposable()


}

依赖关系:

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    //Room
    implementation 'androidx.room:room-runtime:2.2.5'
    annotationProcessor 'androidx.room:room-compiler:2.2.5'

    //rxjava
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

    //Dagger2
    implementation 'com.google.dagger:dagger:2.21'
    kapt 'com.google.dagger:dagger-compiler:2.21'

}

共有1个答案

金坚
2023-03-14

在onCreate中初始化databaseService或使用lazy而不是LateInit。

 类似资料:
  • 我正在为DI与Dagger2的项目工作。我正在MVP架构中注入presenter。由于某种原因,当我构建应用程序时,它会出现错误:“LateInit property presenter has not been initialized”。我知道这意味着没有注射,但我不明白为什么。下面是我的代码: 应用程序类 家庭模块 AppComponent 房屋结构 如果需要任何关于代码的其他信息,请询问..

  • 我不知道这是怎么回事 主要活动 我遇到了这个问题 2022-03-18 09:18:27.393 13874-13874/com。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.e

  • 我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:

  • 我试图将ViewModelFactory注入到活动中,但它总是抛出同样的错误:lateinit属性ViewModelFactory尚未初始化。我找不到我可能做错了什么。请参阅上面我的类中的代码 AppComponent.kt TweetSentimentsApplication.kt

  • 我正在使用Dagger2来注入类依赖,比如Bellow。 但我在TranslateProvider.kt收到一个错误: UninitializedPropertyAccessException:lateinit属性appComponent尚未初始化 我不明白,请帮帮我。 谢了!

  • 当变量只在OnCreate中声明时,为什么我的片段不进入onCreateView?