Hilt Worker 未启动。当我只为 worker 构造函数使用默认参数时工作正常,当我添加第三个参数时它失败
Hilt Worker not getting initiated. Works fine when I use only default params for worker constructor, when I add third param it fails
似乎出于某种原因它没有使用我的自定义工作器,而是启动了默认工作器。以下是代码片段
@HiltWorker
class RequestsWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
var dbRepository: DBRepository) : Worker(appContext, workerParams) {
//doWorK...
}
Application.class
@HiltAndroidApp
class Application: Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun onCreate() {
super.onCreate()
}
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setMinimumLoggingLevel(Log.DEBUG)
.setWorkerFactory(workerFactory)
.build()
}
}
从 fragment 启动 worker
private fun initWorker() {
val request = OneTimeWorkRequestBuilder<RequestsWorker>().build()
WorkManager.getInstance(applicationContext).enqueue(request)
}
我收到以下错误
java.lang.NoSuchMethodException: com.sala.cbc.backgroundsync.RequestsWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:2321)
at java.lang.Class.getDeclaredConstructor(Class.java:2167)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:244)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:136)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
在清单中,我在应用程序标签中添加了以下内容
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
尝试更改 hilt-android-gradle-plugin 版本 项目级别 build.gradle 文件。
通过将版本从 2.37 升级到 2.38.1,它对我有用。
现在应该是这样的,
classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1"
似乎出于某种原因它没有使用我的自定义工作器,而是启动了默认工作器。以下是代码片段
@HiltWorker
class RequestsWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
var dbRepository: DBRepository) : Worker(appContext, workerParams) {
//doWorK...
}
Application.class
@HiltAndroidApp
class Application: Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun onCreate() {
super.onCreate()
}
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setMinimumLoggingLevel(Log.DEBUG)
.setWorkerFactory(workerFactory)
.build()
}
}
从 fragment 启动 worker
private fun initWorker() {
val request = OneTimeWorkRequestBuilder<RequestsWorker>().build()
WorkManager.getInstance(applicationContext).enqueue(request)
}
我收到以下错误
java.lang.NoSuchMethodException: com.sala.cbc.backgroundsync.RequestsWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:2321)
at java.lang.Class.getDeclaredConstructor(Class.java:2167)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:244)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:136)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
在清单中,我在应用程序标签中添加了以下内容
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
尝试更改 hilt-android-gradle-plugin 版本 项目级别 build.gradle 文件。
通过将版本从 2.37 升级到 2.38.1,它对我有用。
现在应该是这样的,
classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1"