Activity 没有零参数构造函数 - Dagger Hilt

Ibr*_*zin 3 kotlin android-studio dagger-hilt

我正在使用 Dagger Hilt 进行依赖注入

我有一堂课——

会话管理器

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
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

我试图在这样的活动中调用 setLogin 函数 -

主要活动

@AndroidEntryPoint
 class MainActivity @Inject constructor(private val sessionManager: SessionManager) : 
 AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {

  lifecycleScope.launch {
        sessionManager.setLogin(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序

@HiltAndroidApp
class MyApplication : Application() {
 }
Run Code Online (Sandbox Code Playgroud)

显现

<application
    android:name=".MyApplication"
    android:allowBackup="true"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经使用了@AndroidEntryPoint Annotation,但我仍然收到此运行时错误

*java.lang.Class<com.app.app.activities.MainActivity> has no zero argument constructor*
Run Code Online (Sandbox Code Playgroud)

Non*_*hoi 8

因为MainActivity我认为你不能进行构造函数注入,所以尝试字段注入:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var sessionManager: SessionManager
    
    override fun onCreate(savedInstanceState: Bundle?) {    
        lifecycleScope.launch {
            sessionManager.setLogin(true)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你应该可以sessionManager在里面使用onCreate