活动没有零参数构造函数-Dagger Hilt

时间:2020-09-30 20:52:06

标签: android-studio kotlin dagger-hilt

我正在使用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*

1 个答案:

答案 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