SharedPreference 的 Android 刀柄注入

时间:2021-03-28 05:12:39

标签: android sharedpreferences dagger-2 dagger-hilt

由于我对 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()
    }
}

1 个答案:

答案 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()
    }
}