【问题标题】:Android hilt injection for SharedPreferenceSharedPreference 的 Android 刀柄注入
【发布时间】:2021-03-29 01:15:47
【问题描述】:

由于我对 DI 的概念相对较新,因此我一直遇到刀柄注入问题, 这是问题我有一个管理我的应用程序会话(共享首选项)的类,我想将该类注入我的用例(活动/片段),现在当我这样做时会抛出这个错误

“lateinit 属性 sessionManager 尚未初始化”

SessionManager.kt 的代码

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

appmoudle.kt 的代码

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Singleton
    @Provides
    fun provideSharedPreferences(@ApplicationContext context: Context) =
        context.getSharedPreferences(
            Constants.PREF_NAME, Context.MODE_PRIVATE
        )

    @Singleton
    @Provides
    fun provideSessionManager(preferences: SharedPreferences) =
        SessionManager(preferences)
}

我要注入的活动的代码

@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?) {
        AppCompatDelegate.setDefaultNightMode(sessionManager.getTheme())
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_trending_repos)

        setSupportActionBar(binding.appBarLayout.toolbar)
        binding.errorView.retryBtn.setOnClickListener(this)

        init()
    }
}

【问题讨论】:

    标签: android sharedpreferences dagger-2 dagger-hilt


    【解决方案1】:

    好吧,所以在挖掘了这个之后,这不是一个刀柄问题,而是我犯了一个小错误

    问题出在我在下面的 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()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-20
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2016-07-31
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多