Могу ли я ввести значение переменной с помощью Hilt?

Например ... у меня есть это:

@InstallIn(ApplicationComponent::class)
@Module

object AlarmInjection {

    @Provides
    @Singleton
    fun proverToday(): Calendar {
        return Calendar.getInstance()
    }

}

И в своем классе я пытаюсь использовать переменную, которая вводится:

    @AndroidEntryPoint
    class AlarmFragment : Fragment() {
    
        @Inject lateinit var today : Calendar

....


}

и я получаю сообщение об ошибке выполнения, когда пытаюсь использовать переменную today. Он говорит, что свойство lateinit не создается.

kotlin.UninitializedPropertyAccessException: lateinit property today has not been initialized

Итак, я должен использовать lateinit, чтобы вводить что-либо рукоятью, поэтому теоретически это еще не получило значения. Но сама инъекция предоставляет экземпляр класса Calendar.

Как я могу это решить?


person Tarsila Costalonga    schedule 06.01.2021    source источник
comment
Теоретически все вышеперечисленное может, должно сработать, но, поскольку вы не предоставили много информации, мы не можем точно сказать, в чем проблема. Куда именно вы вводите свойство календаря? Правильно ли вы установили все необходимые объявления (например: @AndroidEntryPoint для действий и фрагментов, регистрация приложения в @HiltAndroidApp и т. Д.)? Пожалуйста, предоставьте дополнительный код и пример использования   -  person Andrew    schedule 07.01.2021
comment
У меня есть другие инъекции в этом проекте, поэтому я знаю, что все аннотации верны. Я ввел эту переменную в класс Fragment (), и когда я пытаюсь использовать ее внутри метода, например onCreateView, он выдает, что свойство lateinit сегодня не было инициализировано.   -  person Tarsila Costalonga    schedule 07.01.2021


Ответы (1)


В моем случае тот же код работает нормально.

Вы комментировали @AndroidEntryPoint действие, в котором также используется этот фрагмент?

Согласно документации Android для рукояти, активность также должна быть аннотировано @AndroidEntryPoint, который использует этот фрагмент:

Если вы аннотируете класс Android с помощью @AndroidEntryPoint, вы также должны аннотировать классы Android, которые зависят от него. Например, если вы аннотируете фрагмент, вы также должны аннотировать любые действия, в которых вы используете этот фрагмент.

person Manishoaham    schedule 15.02.2021