我试图使用字段注入在我的片段中注入一个类,当我尝试在
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()
,有时在注入之后调用。
请务必先致电
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 才执行依赖项的注入。