首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Android6.0中使用Dagger2初始化Worker时,应用程序一直崩溃

在Android6.0中使用Dagger2初始化Worker时,应用程序一直崩溃
EN

Stack Overflow用户
提问于 2020-05-14 16:15:33
回答 1查看 249关注 0票数 0

androidx.work.impl.workers.ConstraintTrackingWorker :无法将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的java.lang.Class.asSubclass(Class.java:1486)转换为androidx.work.impl.WorkerWrapperandroidx.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)的.run(WorkerWrapper.java:136)

createWorker()的第一行出错:

代码语言:javascript
代码运行次数:0
运行
复制
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
}

我的worker版本:

代码语言:javascript
代码运行次数:0
运行
复制
def work_version = "2.3.4"
implementation "androidx.work:work-runtime:$work_version"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-15 02:10:49

您的WorkerFactory错误地假设应用程序创建的每个ListenableWorker子类也是一个Worker子类。事实证明,WorkManager库包含此规则的一些例外,这些例外用作内部实现细节。

修复方法是将传递的工作者类视为ListenableWorker的子类,而不是Worker的子类。

代码语言:javascript
代码运行次数:0
运行
复制
val workerclass = Class.forName(workerClassName).asSubclass(ListenableWorker::class.java)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61792470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档