#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 — аннотированный метод