Hos*_*han 17 android androidx dagger-hilt
我正在尝试遵循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]
Run Code Online (Sandbox Code Playgroud)
为了重现该问题,我在Dagger Hilt Example Repo 中添加了指南中的示例代码
E/WM-WorkerFactory: Could not instantiate com.example.android.hilt.ExampleWorker
java.lang.NoSuchMethodException: <init> [class android.content.Context, class androidx.work.WorkerParameters]
Run Code Online (Sandbox Code Playgroud)
注意:
AppNavigator在NavigationModule 中作为@Binds abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator.
另请注意,替换AppNavigator为AppDatabasewhich is@Singleton无济于事。
这就是我开始工作的方式 MainActivity
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()
}
}
Run Code Online (Sandbox Code Playgroud)
不确定究竟是什么问题。
更新:我创建了一个全新的 Android 项目来重现它。该项目附加到 issue#158843197。GitHub Gist提供了所有关键文件源代码快照(如果您想快速查看)。
更新#2:解决方案
除了下面Ian提到的内容之外,问题是我错过了 Gradle 依赖项app/build.gradle(在aosp#158843197 中提到)
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
Run Code Online (Sandbox Code Playgroud)
的依赖注入Worker现在正在工作。
ian*_*ake 18
从androidx.work-*version 开始2.6.0-alpha01,WorkManager用于androidx.startup初始化 WorkManager。
有关对 的新要求更改AndroidManifest.xml,请查看此答案。
由于每WorkManager的配置和初始化文件,使用Configuration.Provider你的界面Application,则必须删除默认初始化:
<!-- In your AndroidManifest.xml -->
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)
否则,默认初始化程序仍将运行,清除您的自定义初始化及其HiltWorkerFactory.
| 归档时间: |
|
| 查看次数: |
4385 次 |
| 最近记录: |