У Activity нет конструктора с нулевым аргументом - 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*

person Ibramazin    schedule 30.09.2020    source источник


Ответы (1)


Для MainActivity я думаю, что вы не можете выполнять инъекцию конструктора, поэтому попробуйте инъекцию поля следующим образом:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

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

Теперь у вас должна быть возможность использовать sessionManager внутри onCreate

person Nongthonbam Tonthoi    schedule 01.10.2020