【发布时间】:2020-06-13 03:46:22
【问题描述】:
我正在尝试遵循 https://developer.android.com/training/dependency-injection/hilt-jetpack#workmanager 的指南并遇到以下错误
E/WM-WorkerFactory: Could not instantiate com.example.android.hilt.ExampleWorker
java.lang.NoSuchMethodException: <init> [class android.content.Context, class androidx.work.WorkerParameters]
为了重现该问题,我在 Dagger Hilt Example Repo 中添加了来自 gude 的示例代码
class ExampleWorker @WorkerInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
val workerDependency: AppNavigator
) : Worker(appContext, workerParams) {
override fun doWork(): Result {
Log.d("WORKER", "I am the worker, got dependency: $workerDependency")
return Result.success()
}
}
注意:
AppNavigator在NavigationModule 中提供为@Binds abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator.
另请注意,将AppNavigator替换为AppDatabase(即@Singleton)并没有帮助。
这就是我从MainActivity开始工作的方式
override fun onStart() {
super.onStart()
enqueueWorker(applicationContext)
}
private fun enqueueWorker(context: Context) {
val request = OneTimeWorkRequestBuilder<ExampleWorker>().build()
WorkManager.getInstance(context).enqueue(request)
}
不确定到底是什么问题。
更新:我创建了一个全新的 Android 项目来重现它。该项目是attached to the issue#158843197。所有关键文件源代码快照都可以在GitHub Gist 获得(如果您想快速查看)。
更新#2:解决方案
除了 Ian mentioned below 之外,问题是我错过了 app/build.gradle 中的 Gradle 依赖项(在 aosp#158843197 中提到)
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
Worker 的依赖注入现在正在工作。
【问题讨论】:
-
在问题跟踪器issuetracker.google.com/issues/158843197报告了这个问题
标签: android androidx dagger-hilt