gpt4 book ai didi

SharedPreference 的 Android handle 注入(inject)

转载 作者:行者123 更新时间:2023-12-05 06:02:47 26 4
gpt4 key购买 nike

我一直对刀柄注入(inject)有疑问,因为我对 DI 的概念比较陌生,这是我有一个管理我的应用程序 session (共享首选项)的类的问题,我想将该类注入(inject)我的用例( Activity/fragment ),现在当我这样做时它抛出这个错误

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

我注入(inject)的 Activity 代码

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

最佳答案

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

问题出在我在下面的 super.oncreate 之前调用注入(inject)类的 Activity 中是修复

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

关于SharedPreference 的 Android handle 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66838563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com