gpt4 book ai didi

android - 注入(inject)工作类时无法实例化工作人员

转载 作者:行者123 更新时间:2023-12-05 05:40:27 29 4
gpt4 key购买 nike

我正在为我的项目使用 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()
}
}

我的 worker :

@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”

如果我不注入(inject)自己的依赖项,一切都很好。而且我已经仔细检查了我的依赖项。知道我错过了什么吗?

编辑:

如果有帮助,我注意到在我的应用程序类中没有调用 getWorkManagerConfiguration()。为了验证我的 list 是否正确使用了正确的类,我确实看到在我的应用程序类中调用了 onCreate() 。调试 WorkManager 初始化代码,看起来 WorkManager 仍然通过 android 启动来初始化工作管理器。我现在已经检查了我的 list 几次,我相信它正确地从应用程序启动中删除了工作管理器。

最佳答案

解决方案:

检查你的gradle: Injecting CoroutineWorker with Hilt : Could not instantiate woker

在这里查看: https://github.com/google/dagger/issues/2601 https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration

在gradle中添加这个:

    kapt("androidx.hilt:hilt-compiler:1.0.0")

以前我没有 () 但有空格。

在 list 中

 <provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>

申请

@HiltAndroidApp
class Application : Application(), Configuration.Provider {

@Inject
lateinit var workerFactory: HiltWorkerFactory

override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}

我的 gradle 版本:

    hilt_version = "2.37"
hilt_deps = [
classpath_plugin: "com.google.dagger:hilt-android-gradle-plugin:$hilt_version",
hilt : "com.google.dagger:hilt-android:$hilt_version",
compiler : "com.google.dagger:hilt-android-compiler:$hilt_version"
]


kapt hilt_deps.compiler
kapt("androidx.hilt:hilt-compiler:1.0.0")
implementation hilt_deps.hilt
implementation 'androidx.hilt:hilt-work:1.0.0'
lifecycle_version = "2.4.0-alpha02"
lifecycle_deps = [
viewmodel: "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version",
lifecycle: "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version",
compiler : "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
]

检查你是否有 @Inject constructor() 和你想要提供的类。

关于android - 注入(inject)工作类时无法实例化工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72419550/

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