我正在使用Dagger Hilt进行可靠注射
我上课-
SessionManager
class SessionManager (context: Context){
private val dataStore: DataStore<Preferences> = context.createDataStore(
name = "session"
)
companion object{
val IS_LOGIN = preferencesKey<Boolean>(name = "is_login")
}
suspend fun setLogin(isLogin: Boolean){
dataStore.edit {
preferences ->
preferences[IS_LOGIN] = isLogin
}
}
}
我正在尝试在这样的活动中调用setLogin函数-
MainActivity
@AndroidEntryPoint
class MainActivity @Inject constructor(private val sessionManager: SessionManager) :
AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
lifecycleScope.launch {
sessionManager.setLogin(true)
}
}
我的应用
@HiltAndroidApp
class MyApplication : Application() {
}
清单
<application
android:name=".MyApplication"
android:allowBackup="true"/>
如您所见,我使用了 @AndroidEntryPoint 注释,但仍然出现运行时错误
*java.lang.Class<com.app.app.activities.MainActivity> has no zero argument constructor*
答案 0 :(得分:2)
对于MainActivity
,我认为您无法进行contructor注入,因此请尝试以以下方式进行场注入:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject
lateinit var sessionManager: SessionManager
override fun onCreate(savedInstanceState: Bundle?) {
lifecycleScope.launch {
sessionManager.setLogin(true)
}
}
}
现在您应该可以在sessionManager
内使用onCreate