Dagger 刀柄错误“lateinit 属性尚未初始化”

问题描述 投票:0回答:1

我试图使用字段注入在我的片段中注入一个类,当我尝试在

onViewCreated()
中访问它时,它会给我 UninitializedPropertyAccessException 。我该如何解决这个问题?

我正在尝试注入的类:

@Singleton
class DialogHandler @Inject constructor() {

    private var currentDialogKey = "dialog_key"
    //....
    //....
}

我的片段:

@AndroidEntryPoint
class AccountFragment : Fragment(R.layout.fragment_account) {

    @Inject
    lateinit var dialogHandler: DialogHandler

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val currentDialogKey = dialogHandler.currentDialogKey // throws error saying dialogHandler is uninitialized
        //....
        //....
    }
}

Hilt 已在应用程序中正确设置,并且在其他类中的构造函数注入中运行良好。但由于片段无法进行构造函数注入,因此我尝试使用字段注入并收到此错误。
请帮忙。

编辑: 此异常并非每次都会发生。所以这似乎是一种竞争条件的情况,有时在注入之前调用

onViewCreated()
,有时在注入之后调用。

android kotlin dependency-injection dagger-2 dagger-hilt
1个回答
0
投票

请务必先致电

super.onViewCreated(view, savedInstanceState)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val currentDialogKey = dialogHandler.currentDialogKey
    //....
}

我在一次活动中也遇到了类似的问题。就我而言,我正在访问一个字段,该字段应该在调用

onCreate
之前由 Hilt 使用
super.onCreate(savedInstanceState)
方法中的字段注入来注入。

就我而言,首先调用

super.onCreate(savedInstanceState)
,然后访问注入的字段解决了问题。

这可能是因为基类应该首先初始化,然后 Hilt 才执行依赖项的注入。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.