小编kka*_*aun的帖子

Kotlin + Dagger 注入问题取决于设备的 Android 版本/SDK (?)

上周,在我当前的 Kotlin MVP 项目中实施 Dagger 时,由于主要手机的维护,我在带有KitKat 4.4.2 的旧手机上测试它(是的,它仍然支持所有主要的材料功能和东西 :))。所以那一周我遇到了典型的问题,而不是一些不寻常的问题,并通过调查提供的错误或多或少地修复了它们。最后,代码已编译,当前项目版本的构建没有问题,并且在 KitKat 与 UI 交互时没有重大错误。

但是当我从维修中心拿起带有Nougat 7.1.2 的主手机并在其上启动应用程序时,我遇到了与 DI 相关的奇怪问题。在那之后,我还在 mate 的Marshmallow 6.0上启动了应用程序,然后又抓到了一个,一模一样。问题简要描述如下:

  • 应用程序(成功)启动;

  • 我能够操作通过上下文和片段管理器注入提供的 ViewPager/DrawerLayout/etc ui 功能;

  • 所有服务也都可用并按预期通过注入运行;

  • 当我抽动 Activity 的演示者时,应用程序崩溃。

现在最有趣的部分让我发疯:所有不会带来任何问题的可访问类都是通过构造函数注入注入的。

但是,演示实例,这是使用注射字段注入,是没有初始化需要的时候。

当然,我尝试不使用 lateinit 修饰符,而是像使用 @JvmField 或不使用它的可空字段一样注入它:结果是相同的 - 它根本没有注入。

由于问题与 相关Activity,我有“自然约束”不使用主构造函数进行注入。

这是一个例外,除了第一个字符串外,它对我来说信息量不大:

kotlin.UninitializedPropertyAccessException: lateinit property presenter has not been initialized
    at .ui.common.view.BaseViewActivity.getPresenter(BaseViewActivity.kt:14)
    at .ui.main.view.MainActivity.onPlaceTypeClick(MainActivity.kt:143)
    at .ui.types.nearby.view.NearbyPlaceTypeItemViewHolder$bind$1.onClick(NearbyPlaceTypeItemViewHolder.kt:32)
    at android.view.View.performClick(View.java:5647)
    at android.view.View$PerformClick.run(View.java:22462)
    at android.os.Handler.handleCallback(Handler.java:754)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:163)
    at android.app.ActivityThread.main(ActivityThread.java:6205)
    at java.lang.reflect.Method.invoke(Native Method) …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger dagger-2 kapt

5
推荐指数
0
解决办法
522
查看次数

标签 统计

android ×1

dagger ×1

dagger-2 ×1

kapt ×1

kotlin ×1