有人问过同样的问题,但它们对我不起作用,一开始我使用的是最新版本的工作管理器,即 2.7 alpha 3,但我降级了,因为它只兼容 android 12 预览版 sdk,错误仍然存在!
它无法实例化工作人员,因为这些依赖项包含在工作人员的构造函数中,在我添加它们之前它就可以工作,但如果我无法添加它们,则刀柄没有任何好处,所以情况如下:
Manifest 不包含任何与工作管理器相关的配置!
应用类别:
@HiltAndroidApp
class TimelineApp : Application() ,Configuration.Provider{
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
Run Code Online (Sandbox Code Playgroud)
工人:
@HiltWorker
class DriveSyncWorker @AssistedInject constructor(
@Assisted val context: Context,
@Assisted workerParams: WorkerParameters,
val dependency: StorageHelper,
)
Run Code Online (Sandbox Code Playgroud)
注意到:它没有使用 HiltWorkFactory !
错误:
E/WM-WorkerFactory: Could not instantiate com.wakaztahir.timeline.utils.workers.DriveSyncWorker
java.lang.NoSuchMethodException: com.wakaztahir.timeline.utils.workers.DriveSyncWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:2332)
at java.lang.Class.getDeclaredConstructor(Class.java:2170)
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:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Android 应用程序。我正在尝试将 hilt 与 workmanager 构造函数一起使用,但它不起作用并给了我这个错误:
2020-08-18 19:01:09.989 18125-18759/com. E/WM-WorkerFactory: Could not instantiate example.android.app.database.DeleteNotesWorker
java.lang.NoSuchMethodException: example.android.app.database.DeleteNotesWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:2328)
at java.lang.Class.getDeclaredConstructor(Class.java:2167)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
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:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
这是工人阶级:
class DeleteNotesWorker @WorkerInject constructor(
@Assisted context: Context,
@Assisted workerParams: WorkerParameters,
private val dao : NotesDao
) : CoroutineWorker(context, workerParams) {
override suspend fun doWork(): Result {
dao.deleteNotesInTrash()
return Result.success()
}
}
Run Code Online (Sandbox Code Playgroud)
应用模块:
@Module
@InstallIn(ApplicationComponent::class)
object AppModule {
@Singleton
@Provides
fun …Run Code Online (Sandbox Code Playgroud) android dependency-injection android-workmanager dagger-hilt