【发布时间】:2022-07-19 02:00:04
【问题描述】:
我正在为我的项目使用 android 应用启动、刀柄和空间。尝试将工作排入队列时出现错误:
com.test E/WM-WorkerFactory: Could not instantiate com.test.RefreshWorker
java.lang.NoSuchMethodException: com.test.RefreshWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
<meta-data
android:name="com.test.RefreshInitializer"
android:value="androidx.startup" />
</provider>
我的应用程序类:
@HiltAndroidApp
class TestApplication: Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
}
我的工人:
@HiltWorker
class RefreshWorker @AssistedInject constructor(
@Assisted context: Context,
@Assisted params: WorkerParameters,
private val repository: Repository,
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result = try {
repository.fetch()
Result.success()
} catch (error: Throwable) {
Result.failure()
}
}
最后是我对工作和刀柄的依赖: def hilt_version = '2.41' def work_version = '2.7.1' 实施“com.google.dagger:hilt-android:$hilt_version” kapt "com.google.dagger:hilt-compiler:$hilt_version" 实现 'androidx.hilt:hilt-work:1.0.0' kapt 'androidx.hilt:hilt-compiler:1.0.0' annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0' 实现“androidx.work:work-runtime-ktx:$work_version”
如果我不注入我自己的依赖,一切都很好。我已经仔细检查了我的依赖项。知道我缺少什么吗?
编辑:
如果有帮助,我注意到我的应用程序类中没有调用 getWorkManagerConfiguration()。为了验证我的清单是否正确使用了正确的类,我确实看到在我的应用程序类中调用了 onCreate()。调试到 WorkManager 初始化代码,看起来 WorkManager 仍然是通过 android 启动来初始化工作管理器。我现在检查了我的清单几次,我相信它正确地从应用启动中删除了工作管理器。
【问题讨论】:
-
请问您解决了吗?
标签: android android-room dagger-hilt