我正在尝试遵循以下指南https://developer.android.com/training/dependency-injection/hilt-jetpack#workmanager 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]
为了重现该问题,我添加了指南中的示例代码匕首柄示例存储库 https://github.com/googlecodelabs/android-hilt/tree/solution
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
提供于导航模块 https://github.com/googlecodelabs/android-hilt/blob/solution/app/src/main/java/com/example/android/hilt/di/NavigationModule.kt as
@Binds abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator
.
另请注意,替换AppNavigator
with 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)
}
不确定到底出了什么问题。
UPDATE:我创建了一个全新的 Android 项目来重现它。该项目是附加到问题#158843197 https://issuetracker.google.com/issues/158843197#comment4。所有密钥文件源代码快照可以在GitHub 要点 https://gist.github.com/amardeshbd/33fe07607c557b8a8f5efff9625f9c72(如果您想快速查看)。
更新#2:解决方案
在伊恩之上如以下所说的 https://stackoverflow.com/a/62355423/132121,问题是我错过了 Gradle 依赖项app/build.gradle
(在aosp#158843197 https://issuetracker.google.com/issues/158843197)
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
依赖注入Worker
现在正在工作。