Android - Kotlin с Dagger2, компонент свойства lateinit не был инициализирован - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в Dagger и получаю следующую ошибку:

FATAL EXCEPTION: main Процесс: com.biolabsalta.app, PID: 8028 java.lang.RuntimeException: Невозможно выполнитьначать действие ComponentInfo {com.lab.app/com.lab.app.ui.login.LoginActivity}: kotlin.UninitializedPropertyAccessException: компонент свойства lateinit не был инициализирован

Эта ошибка произошла, когда я передал свойпроект из Явы в Котлин.Поделиться моим кодомПожалуйста, помогите

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"

1 Ответ

0 голосов
/ 29 октября 2018

Я ничего не знаю о кинжале, но

Вы звоните

presenter.onAttach(this)

Когда LoginMvpPresenter<T> еще не инициализирован.

@Inject
lateinit var presenter: LoginMvpPresenter<LoginMvpView>
...