如果没有 @inject 构造函数或 @Provides - 带注释的方法,则无法提供 Hilt java.lang.Integer
Hilt java.lang.Integer cannot be provided without @inject constructor or @Provides - annotated method
您好,我正在使用 hilt dependecy injector 构建应用程序,但是当我尝试构建应用程序时,我遇到了标题错误。这是我的代码:
流量class:
@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>)
操作class:
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
使用 activity 一切正常,但是当我尝试在片段 android 中注入依赖项时,studio 会抛出该异常。
当 Hilt 注释处理器在您的片段中遇到 @Inject
注释时,它将尝试查找(从带有 @Provides
注释方法的 Hilt @Module
)一个实例Flow
.
根据错误消息,我假设您没有创建它,因此 Hilt 将转到下一个选项并尝试创建 Flow
本身的实例。
所以 Hilt 查看 Flow
的第一个 属性,类型 Int
的 id
。就像在您的片段中注入 Flow
一样,它会重复该过程。它从带有 @Provides
注释方法的 Hilt @Module
中查找 Int
的实例。这不存在。下一个选项,尝试自己构建它。 Int
是一种平台类型,您无权访问,因此您还没有使用 @Inject
注释构造函数创建 Int
class。
Hilt 现在没有选项并抛出此 Exception
:
Hilt java.lang.Integer cannot be provided without @inject constructor or @Provides - annotated method
您好,我正在使用 hilt dependecy injector 构建应用程序,但是当我尝试构建应用程序时,我遇到了标题错误。这是我的代码:
流量class:
@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>)
操作class:
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
使用 activity 一切正常,但是当我尝试在片段 android 中注入依赖项时,studio 会抛出该异常。
当 Hilt 注释处理器在您的片段中遇到 @Inject
注释时,它将尝试查找(从带有 @Provides
注释方法的 Hilt @Module
)一个实例Flow
.
根据错误消息,我假设您没有创建它,因此 Hilt 将转到下一个选项并尝试创建 Flow
本身的实例。
所以 Hilt 查看 Flow
的第一个 属性,类型 Int
的 id
。就像在您的片段中注入 Flow
一样,它会重复该过程。它从带有 @Provides
注释方法的 Hilt @Module
中查找 Int
的实例。这不存在。下一个选项,尝试自己构建它。 Int
是一种平台类型,您无权访问,因此您还没有使用 @Inject
注释构造函数创建 Int
class。
Hilt 现在没有选项并抛出此 Exception
:
Hilt java.lang.Integer cannot be provided without @inject constructor or @Provides - annotated method