由于我对 DI 的概念还比较陌生,因此我一直遇到刀柄注入的问题,
这是问题我有一个管理我的应用程序会话的类(共享首选项),我想将该类注入我的用例(活动/片段),现在当我这样做时,它会抛出此错误
“lateinit 属性 sessionManager 尚未初始化”
SessionManager.kt 的代码
behind
appmoudle.kt 的代码
mergeable_state
我将其注入的活动代码
class SessionManager @Inject constructor(private val preferences: SharedPreferences) {
fun getTheme() = preferences.getInt(Constants.THEME_KEY, AppCompatDelegate.MODE_NIGHT_NO)
fun setTheme(value: Int) {
val editor = preferences.edit()
editor.putInt(Constants.THEME_KEY, value)
editor.apply()
}
}
答案 0 :(得分:0)
好的,所以在挖掘出来之后,这不是刀柄问题,而是我犯的一个小错误
问题出在我在 super.oncreate 之前调用注入类的活动中,下面是修复
@AndroidEntryPoint
class TrendingRepoActivity : BaseActivity(), View.OnClickListener {
private lateinit var viewModel: TrendingRepoViewModel
private lateinit var binding: ActivityTrendingReposBinding
@Inject
lateinit var sessionManager: SessionManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AppCompatDelegate.setDefaultNightMode(sessionManager.getTheme())
binding = DataBindingUtil.setContentView(this,
R.layout.activity_trending_repos)
setSupportActionBar(binding.appBarLayout.toolbar)
binding.errorView.retryBtn.setOnClickListener(this)
init()
}
}