java.lang.ClassCastException: androidx.work.impl.worker.ConstraintTrackingWorker cannot be cast to androidx.work.Worker at java.lang.Class.asSubclass(Class.java:1486) at com.mpower.android. lpincrm.workers.DaggerWorkerFactory.createWorker(DaggerWorkerFactory.kt:38) at androidx.work.WorkerFactory.createWorkerwithDefaultFallback(WorkerFactory.java:83) at androidx.work.impl.WorkerWrapper. runWorker(WorkerWrapper.java:242) 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:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818)
的第一行出现错误。createWorker()
:
override fun createWorker(appContext: Context, workerClassName: String, workerParameters: WorkerParameters): ListenableWorker? {
val workerclass = Class.forName(workerClassName).asSubclass(Worker::class.java)
val constructor = workerclass.getDeclaredConstructor(Context::class.java, WorkerParameters::class.java)
val instance = constructor.newInstance(appContext, workerParameters)
when (instance) {
is MetaWorker -> {
instance.treatmentMetaRepository = foo
instance.newsRepository = foo1
instance.geoDataRepository = foo2
instance.medicineMetaRepository = foo3
instance.preferenceUtil = preferenceUtil
}
is NotificationSchedulerWorker -> {
instance.notificationRepository = notification
}
is SyncWorker -> {
instance.syncAPIs = syncAPI
instance.registrationAPI = registrationAPI
instance.preferenceUtil = preferenceUtil
instance.treatmentRepository = treatmentRepository
instance.medicineRepository = medicineRepository
instance.medicineDetailsRepository = medicineDetailsRepository
instance.collectionRepository = collectionRepository
instance.newVisitRepository = newVisitRepository
instance.dueReceiptRepository = dueReceiptRepository
instance.transportationRepository = transportationRepository
}
}
return instance
}
我的工人版本。
def work_version = "2.3.4"
implementation "androidx.work:work-runtime:$work_version"
你的 WorkerFactory
错误地认为,每一个 ListenableWorker
应用程序创建的子类也是一个 Worker
子类。 原来 WorkManager
库中包含了一些例外的规则,这些规则被用作内部实现细节。
修正的方法是将传递的worker类作为 ListenableWorker
,不 Worker
.
val workerclass = Class.forName(workerClassName).asSubclass(ListenableWorker::class.java)