Intereting Posts
Сбой загрузки с помощью NetWare клиента AsyncRestTemplate В Kotlin, как я могу обойти конфликты наследуемых объявлений, когда класс enum реализует интерфейс? Вызвать лямбда с параметром / s в функции более высокого порядка Плохой тип в стеке операндов с сопрограммами Kotlin Интерфейсы Kotlin экспортируют в Javascript отсутствующие свойства Точное определение «функционального интерфейса» в Java 8 Как изменить свойства тестовых объектов в KotlinTest через interceptTestCase Android Studio и Kotlin: нерешенные ссылки: также Как сделать UpdateOrInsert в коллекциях Котлина Ограничение генерации Котлина Dagger 2 обменивается экземпляром объекта между ведущими Получить значения из файла `.properties` | свойство lateinit не было инициализировано Родственные классы супер / дочерние классы Котлина ClassNotFoundException в пользовательском вкусе с использованием kotlin Как вызвать сокращение на пустой массив Kotlin?

Dagger2 вводит презентатора в ошибку активности Kotlin

Я использую dragger2 для ввода презентатора в действие Kotlin, ведущий имеет значение null, вот мой код:

class CategoryDetailActivity : MvpActivity<ProductFilterView,ProductFilterPresenter>(), ProductFilterView { private lateinit var presenter: ProductFilterPresenter @Inject set override fun onCreate(savedInstanceState: Bundle?) { initialInjector() super.onCreate(savedInstanceState) setContentView(R.layout.activity_category_detail) initData() initEvent() } private fun initialInjector() { DaggerProductFilterComponent.builder() .applicationComponent(applicationComponent) .productFilterModule(ProductFilterModule()) .build() .inject(this) } override fun getPresenter(): ProductFilterPresenter { return presenter!! } 

}

Метод getPresenter () вызывается в onCreate () MvpActivity, а MvpActivity – это класс java. Первоначально презентатору нужно, чтобы какой-то экземпляр предоставил ProductFilterModule, может быть, презентатор должен быть начальным после ввода Компонента, я думаю. когда я запускаю, он бросает KotlinNullPointerException, ведущий – Null.

 time: FATAL EXCEPTION: main Process: com.chiquedoll.chiquedoll, PID: 10617 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chiquedoll.chiquedoll/com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity}: kotlin.KotlinNullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: kotlin.KotlinNullPointerException at com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity.getPresenter(CategoryDetailActivity.kt:281) at com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity.getPresenter(CategoryDetailActivity.kt:36) at com.chiquedoll.chiquedoll.view.activity.MvpActivity.onCreate(MvpActivity.java:19) at com.chiquedoll.chiquedoll.view.activity.CategoryDetailActivity.onCreate(CategoryDetailActivity.kt:65) at android.app.Activity.performCreate(Activity.java:6237) 

Если я использую java для этого, это не проблема.

Dagger 2 не использует сеттеры для ввода полей, он присваивает значения напрямую. Следовательно, правильная версия:

 @Inject internal lateinit var presenter: ProductFilterPresenter 

Обратите внимание, что Dagger 2 требует, чтобы поля для инъекций были, по крайней мере, internal , private не работали.