gpt4 book ai didi

Android WorkManager Worker 无法使用 Dagger Hilt `@WorkerInject` 注入(inject)

转载 作者:行者123 更新时间:2023-12-03 13:25:14 26 4
gpt4 key购买 nike

我正在尝试遵循 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()
}
}

NOTE: The AppNavigator is provided in NavigationModule as @Binds abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator.
Also note, replacing AppNavigator with AppDatabase which is @Singleton does not help.



这就是我从 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 .所有 key 文件 源代码快照可在 GitHub Gist 获得(如果你想快速回顾一下)。

更新#2:解决方案

除了 Ian mentioned below ,问题是我错过了 app/build.gradle 中的 Gradle 依赖项(在 aosp#158843197 中提及)
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
Worker 的依赖注入(inject)现在正在工作。

最佳答案

更新(2021 年 3 月 24 日):
由于androidx.work-*版本 2.6.0-alpha01 , WorkManager使用 androidx.startup初始化 WorkManager。
对于 AndroidManifest.xml 的新要求更改, 检查 this回答。
原答案:
根据 WorkManager Configuration and Initialization documentation , 使用 Configuration.Provider您的Application上的界面, 你必须 remove the default initializer :

<!-- In your AndroidManifest.xml -->
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
否则,默认初始化程序仍将运行,清除您的自定义初始化及其 HiltWorkerFactory .

关于Android WorkManager Worker 无法使用 Dagger Hilt `@WorkerInject` 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62355282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com