如果没有 @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 的第一个 属性,类型 Intid。就像在您的片段中注入 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