有很多这样的问题,但我还没有找到对我有帮助的解决方案。
应用程序/build.gradle
implementation 'androidx.work:work-runtime-ktx:2.8.0'
implementation "com.google.dagger:hilt-android:2.44"
implementation "androidx.hilt:hilt-navigation-compose:1.1.0-alpha01"
implementation 'androidx.hilt:hilt-work:1.0.0'
kapt "com.google.dagger:hilt-android-compiler:2.44"
AndroidManifest.xml
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
申请
@HiltAndroidApp
class MyApp : Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
// other stuff
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setMinimumLoggingLevel(Log.VERBOSE)
.setWorkerFactory(workerFactory)
.build()
}
我的一名工人
@HiltWorker
class Some @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted params: WorkerParameters,
private val someRepository: SomeRepository,
) : CoroutineWorker(appContext, params) {
}
我使用
WorkManager.getInstance(context)
获取工作管理器实例
Worker 未初始化,出现异常
Could not instantiate some.path.SomeWorker
java.lang.NoSuchMethodException: some.path.SomeWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:2363)
at java.lang.Class.getDeclaredConstructor(Class.java:2201)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:243)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:145)
at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
2023-02-12 22:48:56.505 22235-22316 WM-WorkerWrapper
E Could not create Worker some.path.SomeWorker
如果我在构造函数中只保留上下文和工作参数,那么它就可以正常工作
我也遇到了同样的问题,经过 2 天的调查,问题出在 OneSignal 库(One Signal SDK 版本 4.8.6)的初始化上,所以我不得不降级到 4.8.4 并且它起作用了。欲了解更多信息
https://github.com/OneSignal/OneSignal-Android-SDK/issues/1748
我也遇到了同样的问题,我花了很多时间试图弄清楚为什么我会得到
NoSuchMethodException
异常,直到我发现我只有 ksp("com.google.dagger:hilt-compiler:")
但 ksp("androidx.hilt:hilt-compiler:1.2.0")
也是必需的!
因此,如果您也遇到此错误,请务必检查您是否有两者。