Рукоять java.lang.Целое число не может быть предоставлено без @inject constructor или @Provides — аннотированный метод

#android #kotlin #dagger-2 #dagger-hilt

#Android #kotlin #кинжал-2 #кинжал-рукоять

Вопрос:

Здравствуйте, я создаю приложение с помощью инжектора hilt dependecy, но когда я пытаюсь создать приложение, у меня возникла ошибка в названии. Вот мой код:

Класс потока:

 @Entity(tableName = "flows_table")
data class Flow @Inject constructor(@PrimaryKey(autoGenerate = true) val id:Int, val name:String, val duration:Int, val actions:ArrayList<Action>)
 

Класс действия:

 data class Action @Inject constructor(
    val type: String,
    val color: String?,
    val brightness: Int?,
    val duration: Float
)
 

Мое приложение:

 @HiltAndroidApp
class YeebumApplication : Application() {
     //get bulbs repository
     private val bulbsDatabase by lazy { BulbsDatabase.getInstance(this)}
     val bulbsRepository by lazy { BulbsRepository(bulbsDatabase!!.bulbsDao()) }

     //get flows repository
     private val flowsDatabase by lazy { FlowsDatabase.getInstance(this) }
     val flowsRepository by lazy { FlowsRepository(flowsDatabase!!.flowsDao())}
}
 

Мой фрагмент:

 @AndroidEntryPoint
class ActionDetailsFragment : Fragment() {


    @Inject
    lateinit var flow: Flow
 

С активностью все работает отлично, но когда я пытаюсь внедрить зависимости во фрагмент android studio, возникает это исключение.

Ответ №1:

Когда обработчик аннотаций Hilt обнаружит @Inject аннотацию в вашем фрагменте, он попытается найти (из Hilt @Module с @Provides аннотированным методом) экземпляр Flow .

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

Итак, Hilt рассматривает первое свойство Flow id типа Int . И точно так же, как при введении Flow в ваш фрагмент, процесс повторяется. Он ищет экземпляр Int из эфеса @Module с @Provides аннотированным методом. Этого не существует. Следующий вариант — попробуйте сконструировать его самостоятельно. Well Int — это тип платформы, у вас нет доступа, поэтому вы не создали Int класс с @Inject аннотированным конструктором.

У Эфеса теперь нет вариантов, и он бросает это Exception :

Рукоять java.lang.Целое число не может быть предоставлено без @inject constructor или @Provides — аннотированный метод