【问题标题】:Android - Kotlin with Dagger2, lateinit property component has not been initializedAndroid - 带有 Dagger2 的 Kotlin,lateinit 属性组件尚未初始化
【发布时间】:2018-10-29 00:44:48
【问题描述】:

我是 Dagger 新手,使用它时出现以下错误。

致命异常:主要 进程:com.biolabsalta.app,PID:8028 java.lang.RuntimeException:无法启动活动 组件信息{com.lab.app/com.lab.app.ui.login.LoginActivity}: kotlin.UninitializedPropertyAccessException:lateinit 属性 组件尚未初始化

当我将项目从 java 传递到 kotlin 时发生此错误。 分享我的代码。请帮忙

ActivityComponent.kt

@PerActivity
@Component(dependencies = arrayOf(ApplicationComponent::class),
        modules = arrayOf(ActivityModule::class))
interface ActivityComponent {

    @ActivityContext
    fun context(): Context

    fun inject(activity: MainActivity)

    fun inject(activity: LoginActivity)

    ...
}

ActivityModule.kt

@Module
class ActivityModule constructor(private val activity: AppCompatActivity) {

    @Provides
    @ActivityContext
    fun provideContext(): Context = activity

    @Provides
    fun provideActivity(): AppCompatActivity = activity

    @Provides
    @PerActivity
    fun provideMainPresenter(
            presenter: MainPresenter<MainMvpView>): MainMvpPresenter<MainMvpView> = presenter

    @Provides
    @PerActivity
    fun providerLoginPresenter(
            presenter: LoginPresenter<LoginMvpView>): LoginMvpPresenter<LoginMvpView> = presenter
...
}

BaseActivity.kt

abstract class BaseActivity : AppCompatActivity(), MvpView {

    lateinit var activityComponent: ActivityComponent

    override val isNetworkConnected: Boolean
        get() = NetworkUtils.isNetworkConnected(applicationContext)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activityComponent = DaggerActivityComponent.builder()
                .activityModule(ActivityModule(this))
                .applicationComponent(LabApp.component)
                .build()
    }

LoginActivity.kt

class LoginActivity : BaseActivity(), LoginMvpView {

    @Inject
    lateinit var presenter: LoginMvpPresenter<LoginMvpView>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        activityComponent.inject(this)

        presenter.onAttach(this)

        btn_login.setOnClickListener{
            presenter.onServerLoginClick(account_email!!.text.toString(),
                    account_password.text.toString())
            hideKeyboard()
        }

LabApp.kt

class LabApp : Application() {

    companion object {
        lateinit var component: ApplicationComponent
    }

    override fun onCreate() {
        super.onCreate()

        component = DaggerApplicationComponent.builder()
                .applicationModule(ApplicationModule(this))
                .build()

        component.inject(this)
    }
}

谁能帮帮我? 提前致谢。

更新 我只是忘了在清单中声明。

android:name=".LabApp"

【问题讨论】:

  • 尝试从LabApp中删除component.inject(this)

标签: android kotlin dagger-2


【解决方案1】:

我对匕首一无所知,但是

你在打电话

presenter.onAttach(this)

LoginMvpPresenter&lt;T&gt; 尚未初始化时。

@Inject
lateinit var presenter: LoginMvpPresenter<LoginMvpView>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2023-03-25
    • 2020-04-14
    • 2021-10-13
    • 2022-07-05
    相关资源
    最近更新 更多