Android 用刀柄注射狼人:无法实例化狼人
同样的问题也被问到了,但它们对我不起作用,一开始我使用的是最新版本的work manager,它是2.7 alpha 3,但我降级了,因为它只兼容android 12预览sdk,错误仍然存在Android 用刀柄注射狼人:无法实例化狼人,android,android-workmanager,dagger-hilt,Android,Android Workmanager,Dagger Hilt,同样的问题也被问到了,但它们对我不起作用,一开始我使用的是最新版本的work manager,它是2.7 alpha 3,但我降级了,因为它只兼容android 12预览sdk,错误仍然存在 它无法实例化worker,因为这些依赖项包含在worker的构造函数中,在我添加它们之前它已经工作了,但是如果我不能添加它们,hilt没有任何好处,因此情况如下: 清单不包含任何与work manager相关的配置 应用程序类别: @HiltAndroidApp class TimelineApp : Ap
它无法实例化worker,因为这些依赖项包含在worker的构造函数中,在我添加它们之前它已经工作了,但是如果我不能添加它们,hilt没有任何好处,因此情况如下: 清单不包含任何与work manager相关的配置 应用程序类别:
@HiltAndroidApp
class TimelineApp : Application() ,Configuration.Provider{
@Inject
lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
工人:
@HiltWorker
class DriveSyncWorker @AssistedInject constructor(
@Assisted val context: Context,
@Assisted workerParams: WorkerParameters,
val dependency: StorageHelper,
)
注意:它不使用希尔特工厂
错误:
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 java.lang.Thread.run(Thread.java:923)
E/WM-WorkerWrapper: Could not create Worker com.wakaztahir.timeline.utils.workers.DriveSyncWorker
链接:
由于您使用的是高于2.6.0-alpha01的工作管理器版本,高于2.6.0-alpha01的工作管理器版本使用启动初始值设定项 将此提供程序添加到您的应用程序
AndroidManifest.xml
:
<application ... >
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
</application>
但是您正在从应用程序重写getWorkManagerConfiguration
(因为Hilt需要它),因此您需要将该提供程序添加到清单中。我这样做了,它仍然会给出错误!文档中写道:注意:由于这会自定义WorkManager配置,因此还必须从AndroidManifest.xml文件中删除WorkManager文档中指定的默认初始值设定项。谢谢你的帮助!
<application ... >
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
</application>