【发布时间】:2021-03-17 13:45:22
【问题描述】:
Hy
我最近将我的项目从 Dagger 2 迁移到 Hilt。一切都很顺利,但是当我修改我的 WorkManager 类时,因为我的工人没有做任何事情。
在 logcat 中我发现了这个错误信息:WM-WorkerFactory: Could not instantiate hu.crm.crmapp.workmanager.SynchronizationWorker java.lang.NoSuchMethodException:hu.crm.crmapp.workmanager.SynchronizationWorker。 [类android.content.Context,类androidx.work.WorkerParameters]
首先,我检查了在 stackoverflow 中找到的所有内容,因此我从清单中删除了 thw workmanager 提供程序。
我也提供了 Sync 和 PrefManager 依赖项,但我不在这里复制那一堆代码。
My Woker class:
@HiltWorker
class SynchronizationWorker @AssistedInject constructor(
private val sync: Sync,
private val prefManager: PrefManager,
@Assisted private val context: Context,
@Assisted workerParams: WorkerParameters
) : Worker(context, workerParams) {
private val countDownLatch = CountDownLatch(1)
override fun doWork(): Result {
val notificationHelper = NotificationHelper(context)
var workResult: Result = Result.success()
//doThings
}
My Application class:
@HiltAndroidApp
class CrmApp : Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
@Inject
lateinit var errorLogDao: ErrorLogDao
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
MultiDex.install(this)
}
override fun onCreate() {
super.onCreate()
BuildTypeInitializations.init(this)
}
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
}
And there is the call of Worker class
val constraint =
Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED).build()
val synchronizationWorker =
OneTimeWorkRequest.Builder(SynchronizationWorker::class.java)
.setConstraints(constraint)
.setBackoffCriteria(
BackoffPolicy.LINEAR,
OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
TimeUnit.MILLISECONDS
)
.build()
WorkManager.getInstance(requireContext()).enqueue(synchronizationWorker)
感谢您的帮助。
【问题讨论】:
标签: android kotlin dagger-hilt